题目:
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.
Note:
- All numbers will be positive integers.
- The solution set must not contain duplicate combinations.
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]]
这道题跟前两道题目相比:
1. 没有重复元素,不需要排序去重
2. 只能使用一次,begin = i + 1
3. 加数有个数限制, k == 0,才加入结果中
class Solution {
public:
vector<vector<int> > res;
void backtraceComSum(vector<int> &cand,vector<int> &comb,int begin,int k,int target)
{
if(target <= 0)
{
if(target == 0 && k == 0)
res.push_back(comb);
return;
}
for(int i = begin; i < cand.size(); i++)
{
comb.push_back(cand[i]);
backtraceComSum(cand,comb,i + 1,k - 1 ,target-cand[i]);
comb.pop_back();
}
}
vector<vector<int>> combinationSum3(int k, int n) {
vector<int> candidate = {1,2,3,4,5,6,7,8,9};
res.clear();
vector<int> comb;
int target = n;
backtraceComSum(candidate,comb,0,k,target);
return res;
}
};