您的位置:首页 > 其它

216. Combination Sum III

2017-12-15 13:32 369 查看
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();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Backtracking Array