您的位置:首页 > 其它

216. Combination Sum III

2017-02-24 11:19 211 查看
Find all possible combinations of k numbers that add up to a number n, given that only numbers from 1 to 9 can be used and each combination should be a unique set of numbers.

Example 1:

Input: k = 3, n = 7

Output:

[[1,2,4]]


Example 2:

Input: k = 3, n = 9

Output:

[[1,2,6], [1,3,5], [2,3,4]]


class Solution {
public:
vector<vector<int>> ans;
void dfs(int k, int start, int sum, vector<int> v, int n){
if(v.size() == k){
if(sum == n)
ans.push_back(v);
return;
} else {
for(int i = start; i <= 9; ++i){
v.push_back(i);
dfs(k, i + 1, sum + i, v, n);
v.pop_back();
}
}
}
vector<vector<int>> combinationSum3(int k, int n) {
vector<int> v;
dfs(k, 1, 0, v, n);
return ans;
}
};


在leetcode39,40的基础上加个附加条件即可

class Solution {
public:
vector<vector<int>> ans;
void dfs(int k, int n, int begin, int s, int cnt, vector<int>& vec){
for(int i = begin; i < 10; ++i){
int tmp = s + i;
if(tmp < n){
vec.push_back(i);
dfs(k, n, i + 1, tmp, cnt + 1, vec);
} else if(tmp == n && cnt + 1 == k){
vec.push_back(i);
ans.push_back(vec);
vec.pop_back();
vec.pop_back();
return ;
} else {
s -= i;
vec.pop_back();
return ;
}
}
vec.pop_back();
}
vector<vector<int>> combinationSum3(int k, int n) {
vector<int> vec;
dfs(k, n, 1, 0, 0, vec);
return ans;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: