题目详述
给定两个整数 n 和 k,返回 1 … n 中所有可能的 k 个数的组合。
示例:
输入: n = 4, k = 2
输出:
[
[2,4],
[3,4],
[2,3],
[1,2],
[1,3],
[1,4],
]
解法:回溯
class Solution{
private int n;
private int k;
List<List<Integer>> output = new ArrayList();
public List<List<Integer>> combine(int n, int k) {
this.n = n;
this.k = k;
backtrack(1, new ArrayList<Integer>());
return output;
}
private void backtrack(int first, ArrayList<Integer> curr) {
if (curr.size() == k) output.add(new ArrayList(curr));
for (int i = first; i < n + 1; i++) {
curr.add(i);
backtrack(i + 1, curr);
// 回溯的关键步骤
curr.remove(curr.size() - 1);
}
}
}