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>> ans;
// if(k < 1 || n < 1)
// return ans;
vector<int> re;
genComSum3(ans, re, 1, 9, k, n);
return ans;
}
private:
void genComSum3(vector<vector<int>>& ans, vector<int>& re, int start, int end, int k, int n){
if(n == 0 && k == 0){
ans.push_back(re);
return;
}
if(n < 0 || start > end)
return;
re.push_back(start);
genComSum3(ans, re, start+1, end, k-1, n-start);
re.pop_back();
genComSum3(ans, re, start+1, end, k, n);
}
};