题目描述:
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到9,还是可以利用递归解决,而且不用担心元素重复的问题。
class Solution {
public:
vector<vector<int>> combinationSum3(int k, int n) {
int i=1;
vector<int> cur;
vector<vector<int>> result;
combineSum_recur(k,n,i,cur,result);
return result;
}
void combineSum_recur(int k, int n, int i, vector<int> cur, vector<vector<int>>& result)
{
if(n<0) return;
if(i>10) return;
if(cur.size()<k)
{
combineSum_recur(k,n,i+1,cur,result);
cur.push_back(i);
combineSum_recur(k,n-i,i+1,cur,result);
}
else if(cur.size()==k)
{
if(n==0) result.push_back(cur);
return;
}
return;
}
};