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:
void dfs(vector<int> candidates, int start, int curtarget, int num, vector<int>& curcom, vector<vector<int>>& result) {
if (curcom.size() == num && curtarget == 0) {
result.push_back(curcom);
return ;
}
if (curtarget < 0 || curcom.size() > num) return ;
for (int i = start; i < candidates.size(); i++) {
//if (i != candidates.size() && candidates[i] == candidates[i+1]) continue;
curcom.push_back(candidates[i]);
dfs(candidates, i + 1, curtarget - candidates[i], num, curcom, result);
curcom.pop_back();
}
}
vector<vector<int>> combinationSum3(int k, int n) {
vector<int> candidates = {1, 2, 3,4, 5, 6, 7, 8, 9};
vector<vector<int>> result;
vector<int> curcom;
dfs(candidates, 0, n, k, curcom, result);
return result;
}
};