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>> combinationSum3(int k, int n) {
vector<vector<int>> result;
vector<int> sol;//数组每一项
combination(result,sol,k,n);
return result;
}
void combination(vector<vector<int>>&result,vector<int> sol,int k, int n) {
if(sol.size() == k && n == 0){//递归结束条件,个数为K,且和为n
result.push_back(sol);//在结果中加入符合条件的数组
return;
}
if(sol.size()<k) {//判断每一个符合条件的数组
for(int i=sol.empty()? 1:sol.back()+1;i<=9;++i) {
if(n-i < 0) break;
sol.push_back(i);
combination(result,sol,k,n-i);
sol.pop_back();//在最后需要清空数组以备下次使用
}
}
}
};