题目
给定两个整数 n 和 k,返回 1 … n 中所有可能的 k 个数的组合。
示例:
输入: n = 4, k = 2
输出:
[
[2,4],
[3,4],
[2,3],
[1,2],
[1,3],
[1,4],
]
思路
对于示例中
k
=
2
k = 2
k=2,很容易通过双重循环解题,但 k
很大时,我们无法动态构造 k
重循环,因此可以用递归代替 k
重循环,代码如下:
代码
class Solution {
private List<List<Integer>> ans;
public void recurrence(List<Integer> path, int i, int n, int k){
if (path.size() == k) {
ans.add(new ArrayList<>(path));
return;
}
for (int j=i; j<=n-k+path.size()+1; j++){
path.add(j);
recurrence(path, j+1, n, k);
path.remove(path.size()-1);
}
}
public List<List<Integer>> combine(int n, int k) {
ans = new ArrayList<>();
List<Integer> path = new ArrayList<>();
recurrence(path, 1, n, k);
return ans;
}
}