1、题目描述
输入两个整数k和n,从1-9中选k个数,使得k数之和为n,返回所有这样的k元组。
2、思路
Backtracking。
和II差不多,比II简单的一点是,数组不会有重复元素,所以dfs的时候不用检查了。
另外需要一个变量来记录组成小组合的元素数量,确保是k个数,和为n。
3、代码
vector<vector<int>> combinationSum3(int k, int n) {
vector<vector<int>> ans;
vector<int>v;
dfs(ans,v,n,k,1);
return ans;
}
void dfs(vector<vector<int>>& ans,vector<int>& v, int n, int k, int start){
if(n==0){
if(k==0){
ans.push_back(v);
return;
}
else
return;
}
else if(n<0||k==0)
return;
for(int i=start;i<=9;i++){
v.push_back(i);
dfs(ans,v,n-i,k-1,i+1);
v.pop_back();
}
}