题目描述:
找出所有相加之和为 n 的 k 个数的组合。组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字。
说明:
所有数字都是正整数。
解集不能包含重复的组合。
输入:
[-4,-1,0,3,10]
[-7,-3,2,3,11]
输出:
[0,1,9,16,100]
[4,9,9,49,121]
题意:
题目描述
题解:
简单dfs
直接搜,记录一下开始的值,k和n就好了
代码:
class Solution {
List<List<Integer>> ans = new ArrayList<>();
public List<List<Integer>> combinationSum3(int k, int n) {
for(int i = 1; i <= 9; i ++){
List<Integer> list = new ArrayList<>();
list.add(i);
combinationSum3_dfs(i,n - i,k - 1,list);
list.remove(list.size() - 1);
}
return ans;
}
public void combinationSum3_dfs(int st,int n,int k,List<Integer> list){
if(n == 0 && k == 0){
ans.add(new ArrayList<>(list));
return ;
}
else if(n == 0) return ;
else if(k == 0) return ;
for(int i = st + 1; i <= 9; i ++){
list.add(i);
combinationSum3_dfs(i,n - i,k - 1,list);
list.remove(list.size() - 1);
}
}
}