目录
组合求和III
描述
找出所有相加之和为 n 的 k 个数的组合。
组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字。
说明
所有数字都是正整数。
解集不能包含重复的组合。 ll
示例 1
输入: k = 3, n = 7 输出: [[1,2,4]]
示例 2
输入: k = 3, n = 9 输出: [[1,2,6], [1,3,5], [2,3,4]]
方法:回溯
回溯+剪枝
class Solution {
public List<List<Integer>> combinationSum3(int k, int n) {
List<List<Integer>> res=new ArrayList<>();
dfs(res,new ArrayList<>(),k,1,n);
return res;
}
private void dfs(List<List<Integer>> res, List<Integer> list, int k, int i, int n) {
if (n<=0){
if (list.size()==k && n==0){
res.add(new ArrayList<>(list));//添加到结果中
}
return;//n<0直接剪枝
}
for (int j = i; j < 10; j++) {
list.add(j);//选择当前元素
dfs(res,list,k,j+1,n-j);//递归
list.remove(list.size()-1);//回溯
}
}
}