题目大意
找出所有相加之和为 n 的 k 个数的组合。组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字。
说明:
- 所有数字都是正整数。
- 解集不能包含重复的组合。
示例 1:
输入: k = 3, n = 7
输出: [[1,2,4]]
示例 2:
输入: k = 3, n = 9
输出: [[1,2,6], [1,3,5], [2,3,4]]
解题思路
回溯法。
class Solution {
public:
vector<vector<int>> combinationSum3(int k, int n) {
if (n < 1 || n > 45)
return {};
vector<vector<int>> res;
vector<int> curNums;
dfs(res, k, n, 1, curNums);
return res;
}
void dfs(vector<vector<int>> & res, int k, int n, int index, vector<int> & curNums){
if (curNums.size() == k){
if (n == 0){
res.push_back(curNums);
}
return ;
}
for (int i = index; i <= 9; ++i){
curNums.push_back(i);
dfs(res, k, n - i, i + 1, curNums);
curNums.pop_back();
}
}
};