题目描述
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]]
解题思路
题目要求的是数字1-9,可以使用递归,如果数字太大,那么时间复杂度就特别大了。
代码
class Solution {
public:
vector<vector<int>> combinationSum3(int k, int n) {
vector<vector<int> > result;
vector<int> sub;
int sum=0;
visit(1,k,n,sum,sub,result);
return result;
}
void visit(int start,int k,int n,int &sum,vector<int>& sub,vector<vector<int> >& result){
if(k==0){
if(sum==n){
result.push_back(sub);
}
return;
}
for(int i=start;i<=9;i++){
if(sum+i>n)
break;
sub.push_back(i);
sum+=i;
visit(i+1,k-1,n,sum,sub,result);
sub.pop_back();
sum-=i;
}
}
};