题目:
找出所有相加之和为 n 的 k 个数的组合。组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字。
示例:
输入: k = 3, n = 7
输出: [[1,2,4]]
解法
sum记录当前和,可以在函数调用中相加,可以节省一部回溯的步骤。
优化剪枝:在数字没到数量限制时,和已经大于目标和时。
if (sum > n) return;
代码
class Solution {
private:
vector<int> path;
vector<vector<int>> res;
public:
void traversal(int k, int n, int sum, int Index) {
if (path.size() == k) {
if (sum == n)
res.push_back(path);
return;
}
for (int i = Index; i <= 9; i++) {
path.push_back(i);
traversal(k, n, sum + i, i + 1);
path.pop_back();
}
}
vector<vector<int>> combinationSum3(int k, int n) {
path.clear();
res.clear();
traversal(k, n, 0, 1);
return res;
}
};