题目¶
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]]
分析¶
这道题和前面的Combination Sum主要的区别是它规定了有k个数。所以除了base case变动以外,其他都可以保持一致。
class Solution { public: void combinationSum3Helper(int k, int n, vector<int>& candidates, vector<vector<int>>& res, vector<int>& chosen, int position){ if (k==0){ //base case if (n==0){ res.push_back(chosen); } }else{ for (int i=position; i<candidates.size(); i++){ // choose chosen.push_back(candidates[i]); // explore combinationSum3Helper(k-1, n-candidates[i], candidates, res, chosen, i+1); // unchoose chosen.pop_back(); } } } //Find all possible combinations of k numbers that add up to a number n vector<vector<int>> combinationSum3(int k, int n) { vector<int> candidates={1,2,3,4,5,6,7,8,9}, chosen; vector<vector<int>> res; combinationSum3Helper(k, n, candidates, res, chosen, 0); return res; } };





近期评论