画出解空间树,可以发现是一个组合问题,而且递归中不能重复之前的数。所以用begin,传入i+1当递归的begin。
结束就利用target就可以判断。
class Solution {
List<List<Integer>> res=new ArrayList<List<Integer>>();
public List<List<Integer>> combinationSum3(int k, int n) {
List<Integer> path=new ArrayList<Integer>();
dfs(n,k,path,1);
return res;
}
public void dfs(int n,int k,List<Integer> path,int begin){
if(n<0){
return;
}
if(n==0 && path.size()==k){
res.add(new ArrayList<>(path));
return;
}
for(int i=begin;i<=9;i++){
path.add(i);
dfs(n-i,k,path,i+1);
path.remove(path.size()-1);
}
}
}