给定两个整数 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);}
}