给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合。
输入: n = 4, k = 2
输出:
[
[2,4],
[3,4],
[2,3],
[1,2],
[1,3],
[1,4],
]
class Solution {
private List<Integer> temp = new ArrayList<>();
private List<List<Integer>> ans = new ArrayList();
public void dfs(int cur, int n, int k) {
// 如果当前集合内元素长度 + 允许使用的最大值剩余数 < 指定数字数量 则不能凑足规定数组,可结束
if (temp.size() + (n - cur + 1) < k ) {
return;
}
// 记录合法的答案
if (temp.size() == k) {
ans.add(new ArrayList<>(temp));
return;
}
// 考虑选择当前位置
temp.add(cur);
dfs(cur + 1, n, k);
temp.remove(temp.size() - 1);
// 考虑不选择当前位置
dfs(cur + 1, n, k);
}
}