给定两个整数 n
和 k
,返回范围 [1, n]
中所有可能的 k
个数的组合。
你可以按 任何顺序 返回答案。
示例 1:
输入:n = 4, k = 2 输出: [ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4], ]
示例 2:
输入:n = 1, k = 1 输出:[[1]]
提示:
1 <= n <= 20
1 <= k <= n
Related Topics
题解
常规DFS回溯作法,类似的可以参考下LeetCode刷题【47】全排列 II,基本非常雷同
class Solution {
List<List<Integer>> arr;
int k;
int n;
Set<Integer> integerSet;
public List<List<Integer>> combine(int n, int k) {
arr = new ArrayList<>();
this.k = k;
this.n = n;
integerSet = new HashSet<>();
dfs(new ArrayList<>());
return arr;
}
private void dfs(List<Integer> list){
if(list.size() == k){
arr.add(new ArrayList<>(list));
return;
}
int i;
if (list.size()==0){
i=1;
}else{
i= list.get(list.size()-1) + 1;
}
for (; i <= n; i++) {
if (integerSet.contains(i) ){
continue;
}
integerSet.add(i);
list.add(i);
dfs(list);
list.remove(list.size()-1);
integerSet.remove(i);
}
}
}
发表评论