题目:给定两个整数 n 和 k,返回 1 … n 中所有可能的 k 个数的组合。
输入: n = 4, k = 2
输出:
[
[2,4],
[3,4],
[2,3],
[1,2],
[1,3],
[1,4],
]
最基本的回溯问题,限制条件只有 当前path的元素个数是不是k
public List<List<Integer>> combine(int n, int k) {
List<List<Integer>> ans = new ArrayList<>();
dfs(ans, new LinkedList<>(), n, k, 1);
return ans;
}
void dfs(List<List<Integer>> ans, LinkedList<Integer> path, int n, int k, int start) {
if (path.size() == k) {
ans.add(new ArrayList(path));
return;
}
for (int i = start; i <= n; ++i) {
path.addLast(i);
dfs(ans, path, n, k, i + 1);
path.removeLast();
}
}