zoukankan      html  css  js  c++  java
  • 【1】【leetcode-77】 组合

    (典型,做过似曾相识但不熟悉,基本知道怎么做但调试了一个多小时各种错)

    给定两个整数 n 和 k,返回 1 ... 中所有可能的 k 个数的组合。

    示例:

    输入: n = 4, k = 2
    输出:
    [
      [2,4],
      [3,4],
      [2,3],
      [1,2],
      [1,3],
      [1,4],
    ]


    我的:
    public class Solution77 {
        ArrayList<ArrayList<Integer>> res = new ArrayList<>();
        //为了不重复,list中只能是顺序
        public ArrayList<ArrayList<Integer>> combine(int n, int k) {
    
            if (k > n || k<0 || n<0) {
                return res;
            }
            ArrayList<Integer> list = new ArrayList<>();
            helper(n,k,1,list);
            return res;
        }
        // 还能加入k个数
        public void helper(int n, int k,int start,ArrayList<Integer> list) {
            if (k == 0) {
                res.add(new ArrayList<>(list));  // 易错点1
                return;
            }
            for (int i=start;i<=n-k+1;i++) {
                list.add(i);
                helper(n,k-1,i+1,list);
                list.remove(list.size()-1);  // 易错点2
            }
        }
    }

    参考:

    链接:https://www.nowcoder.com/questionTerminal/4d0a110416d84c7f9454d0da53ab2da1
    来源:牛客网
    
    import java.util.ArrayList;
    //使用剪枝对算法进行了优化;
    //Your runtime beats 99.50 % of java submissions
    public class Solution {
        private ArrayList<ArrayList<Integer>> res;
     
        public ArrayList<ArrayList<Integer>> combine(int n, int k) {
            res = new ArrayList<ArrayList<Integer>>();
            if (n <= 0 || k <= 0 || n < k)
                return res;
            generateCombinations(n, k, 1, new ArrayList<Integer>());
     
            return res;
        }
     
        private void generateCombinations(int n, int k, int start, List<Integer> list) {
            if (list.size() == k) {
                res.add(new ArrayList<Integer>(list));
                return;
            }
            if (start > n)
                return;
     
            int len = k - (list.size() + 1);
            //list当中最终应该有k个元素,当前元素为list.size() + 1,那么我们要为下次回溯留下足够多的数
            for (int i = start; i <= n - len; i++) {
                list.add(i);
                generateCombinations(n, k, i + 1, list);
                list.remove(list.size() - 1);
            }
        }
     
    }
  • 相关阅读:
    vue-cli router的使用
    vue element new vue const
    mac terminal update management pack
    关于MAC升级后,vim更新插件报错
    flex入门----基础知识
    常用的flex知识 ,比起float position 好用不少
    npm 安装nodesass 或者包含nodesass的脚手架工具报错问题
    anglar cli的 rxjs_1.of is not a function
    npm node sass 安装报错
    axios ajax fetch 区别
  • 原文地址:https://www.cnblogs.com/twoheads/p/10639156.html
Copyright © 2011-2022 走看看