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:
基本思路:
使用dfs进行穷举遍历。
因为结果集要求按升序排列,则先选择较小的数字,然后从剩下的较大数中进行选择。
确保每次选择的数都大于上次选择的。
class Solution {
public:
vector<vector<int>> combinationSum3(int k, int n) {
vector<vector<int>> ans;
vector<int> seq;
helper(ans, seq, k, n);
return ans;
}
void helper(vector<vector<int>>& ans, vector<int>& seq, int k, int n) {
if (!k && !n)
return ans.push_back(seq);
if (!k || n<0)
return;
int start = seq.empty() ? 1 : seq.back()+1;
for (int i=start; i<=9; i++) {
seq.push_back(i);
helper(ans, seq, k-1, n-i);
seq.pop_back();
}
}
};