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,3,4,5,6,7,8,9。另外对output的长度有限制。所以在搜索的时候我们要记录当前长度
当output的长度不符合要求的时候,及时return
1 class Solution { 2 public: 3 vector<vector<int>> finalres ; 4 vector<vector<int>> combinationSum3(int k, int target) { 5 vector<int> curres; 6 help(0,curres,1,k,target); 7 return finalres; 8 9 } 10 void help(int cursum,vector<int>& curres,int index,int k,int target){ 11 if(cursum==target&& k==0) 12 finalres.push_back(curres); 13 if(cursum>target||k<0) 14 return; 15 for(int i = index;i<=9;i++){ 16 curres.push_back(i); 17 help(cursum,curres,i+1,k-1,target-i); 18 curres.pop_back(); 19 20 } 21 } 22 };