leetcode 77. 组合-java实现

题目所属分类

简单的dfs 不过这里面没用二进制数和boolean来判断这位数是否走过
而是用了start 来轮序遍历
这个clear()有的时候不加会报错

原题链接

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

你可以按 任何顺序 返回答案。

代码案例:输入:n = 4, k = 2
输出:
[
[2,4],
[3,4],
[2,3],
[1,2],
[1,3],
[1,4],
]

题解

class Solution {
     List<List<Integer>> res = new ArrayList<>();
     List<Integer> a = new ArrayList<>();
    public List<List<Integer>> combine(int n, int k) {
      // ans.clear(); 这个最好加上
        dfs(n,0,1,k);
        return res ;
    }
    public void dfs(int n , int u , int start ,int k){
        if(u == k){
            res.add(new ArrayList<>(a));
            return ;
        }
        for(int i = start ; i <= n ; i++){
            a.add(i);
            dfs(n,u+1,i+1,k);
            a.remove(a.size()-1);

        }
    }
}
posted @ 2022-10-11 18:57  依嘫  阅读(22)  评论(0)    收藏  举报