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.
Ensure that numbers within the set are sorted in ascending order.
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]]
思路:这道题和Combination Sum II的思路类似。只不过candidates数组里只有1-9这9个数,且增加了累加次数的限制。
1 class Solution { 2 public: 3 void assist(vector<vector<int> >& res, vector<int>& cur, int target, int k, int st) 4 { 5 if (k == 0) 6 { 7 if (target == 0) 8 res.push_back(cur); 9 return; 10 } 11 for (int i = st; i <= 9; i++) 12 { 13 cur.push_back(i); 14 assist(res, cur, target - i, k - 1, i + 1); 15 cur.pop_back(); 16 } 17 } 18 vector<vector<int>> combinationSum3(int k, int n) { 19 vector<vector<int> > res; 20 vector<int> cur; 21 assist(res, cur, n, k, 1); 22 return res; 23 } 24 };