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();
}
}
输入两个整数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();
}
}
相关文章推荐
- 216. Combination Sum III
- 216 Combination Sum iii
- LeetCode216:Combination Sum III
- LeetCode216:Combination Sum III
- 216. Combination Sum III
- 216. Combination Sum III
- 216. Combination Sum III
- leetcode 216: Combination Sum III
- 216. Combination Sum III
- 216. Combination Sum III。
- Leetcode 216 Combination Sum III
- 216. Combination Sum III
- 216. Combination Sum III
- leetcode 216: Combination Sum III
- Java for LeetCode 216 Combination Sum III
- Leetcode 216 Combination Sum III 组合求和
- leetcode 216 Combination Sum III java 算法
- [leedcode 216] Combination Sum III
- 【leetcode】【216】Combination Sum III
- leetcode216-Combination Sum III