class Solution {
public:
vector<vector<int>> all;
vector<vector<int>> combinationSum3(int k, int n) {
vector<int> one;
for(int i=1;i<=9-k+1;i++){
com(i,k,n,one);//循环,从i出发作为第一个数去寻找后面的k-1个数。
//如果没有这一层循环的话,那么只有从1开始的组合,少了其他组合。
one.clear();
}
return all;
}
void com(int begin,int k,int target,vector<int> & one){
if(k==1){
if(target==begin) {
one.push_back(begin);
all.push_back(one);//只有相等的时候才可以。
one.pop_back();
return;
}
return;
}
if(begin>target) return;
else{
one.push_back(begin);
for(int i=begin+1;i<=9-k+2;i++){
com(i,k-1,target-begin,one);
}
one.pop_back();
}
return;
}
};
要求不能重复,所以遍历每一个位置qishi的,然后dfs(int begin,int k,int target,vector<int> & one)然后遍历。