组合综合III
学习记录自代码随想录
要点:和组合问题相似,但需要多加一个求和;
class Solution {
private:
vector<int> path;
vector<vector<int>> result;
void backtracking(int k, int n, int sum, int startIndex){
if(sum > n){ // 剪枝
return;
}
if(path.size() == k){
if(sum == n){
result.push_back(path);
}
return;
}
// for(int i = startIndex; i <= 9; i++){
for(int i = startIndex; i <= 9-(k-path.size())+1; i++){ // 剪枝
sum += i;
path.push_back(i);
backtracking(k, n, sum, i+1);
sum -= i; // 回溯
path.pop_back(); // 回溯
}
}
public:
vector<vector<int>> combinationSum3(int k, int n) {
path.clear();
result.clear();
backtracking(k, n, 0, 1);
return result;
}
};