216. 组合总和 III - 力扣(LeetCode) (leetcode-cn.com)
组合总和 III
- DFS
- 回溯
- 剪枝, 剪枝是根据条件剪枝,比如在for循环根据for剪枝, 在边界处根据n剪枝
class Solution {
public:
vector<vector<int>> ans;
vector<int> path;
void DFS(int k, int n, int sum, int index) {
// 剪枝
if (sum > n) return;
// 边界
if (path.size() == k) {
if (sum == n) ans.emplace_back(path);
return;
}
for (int i = index; k - path.size() <= 9 - i + 1; ++i) {
sum += i;
path.emplace_back(i);
DFS(k, n, sum, i + 1);
// 回溯
sum -= i;
path.pop_back();
}
}
vector<vector<int>> combinationSum3(int k, int n) {
DFS(k, n, 0, 1);
return ans;
}
};