Combination Sum III
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]]
Credits:
Special thanks to @mithmatt for adding this problem and creating all test cases.
参考Combination Sum II,把去重条件去掉(1-9本身就不包含重复元素),仅返回包含k个元素的vector
class Solution { public: vector<vector<int>> combinationSum3(int k, int n) { vector<int> num(9); for(int i = 0; i < 9; i ++) num[i] = i+1; return combinationSum2(num, n, k); } vector<vector<int> > combinationSum2(vector<int> &num, int target, int k) { sort(num.begin(), num.end()); vector<vector<int> > ret; vector<int> cur; Helper(ret, cur, num, target, 0, k); return ret; } void Helper(vector<vector<int> > &ret, vector<int> cur, vector<int> &num, int target, int position, int k) { if(target == 0) { if(cur.size() == k) ret.push_back(cur); else ; } else { for(int i = position; i < num.size() && num[i] <= target; i ++) { cur.push_back(num[i]); Helper(ret, cur, num, target-num[i], i+1, k); cur.pop_back(); } } } };
时间: 2024-10-27 06:43:56