Java中给定两个整数 八和大,返回1…n中所有可能的k个数的组合。 示例: 输入:n=4,k=2 输出:[[2,41, [3,4], [2,31, [1,21, [1,31, [1,41,]
时间: 2023-07-02 11:16:08 浏览: 84
可以使用回溯法来解决这个问题。具体做法是,从1开始遍历到n,对于每个数,有两种情况:选或不选。
如果选了当前的数,那么需要在剩下的数中选k-1个数,递归处理即可。
如果不选当前的数,那么需要在剩下的数中选k个数,递归处理即可。
递归的终止条件是,如果k=0,表示已经选够了k个数,将当前的组合加入结果中。
下面是Java的实现代码:
```java
class Solution {
public List<List<Integer>> combine(int n, int k) {
List<List<Integer>> res = new ArrayList<>();
List<Integer> path = new ArrayList<>();
backtrack(n, k, 1, path, res);
return res;
}
private void backtrack(int n, int k, int start, List<Integer> path, List<List<Integer>> res) {
if (k == 0) {
res.add(new ArrayList<>(path));
return;
}
for (int i = start; i <= n; i++) {
path.add(i);
backtrack(n, k - 1, i + 1, path, res);
path.remove(path.size() - 1);
}
}
}
```
对于输入n=4,k=2,输出结果为[[1,2],[1,3],[1,4],[2,3],[2,4],[3,4]]。
阅读全文