目录
代码(二刷debug on answer 2024年3月7日)
题目:
代码(首刷自解 2024年2月1日):
class Solution {
public:
vector<vector<int>> res;
vector<int> path;
void backtracking(vector<int>& candidates, int target, int startIndex) {
if (target == 0) {
res.push_back(path);
return;
}
for (int i = startIndex; i < candidates.size(); ++i) {
target -= candidates[i];
if (target < 0) break;
path.push_back(candidates[i]);
backtracking(candidates, target, i);
path.pop_back();
target += candidates[i];
}
return;
}
vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
sort(candidates.begin(), candidates.end());
backtracking(candidates, target, 0);
return res;
}
};
代码(二刷debug on answer 2024年3月7日)
class Solution {
public://回溯
vector<vector<int>> result;
vector<int> paths;
void backtracking(vector<int>& candidates, int sum, int target, int startIndex) {
// 返回条件 paths.sum() == target
if (sum == target) {
result.push_back(paths);
return;
}
// 遍历 note:可重复选
for (int i = startIndex; i < candidates.size(); ++i) {
if (sum >= target - 1) break;
// 更新paths
sum += candidates[i];
paths.emplace_back(candidates[i]);
// 递归 node:这里的startIndex更新为i而不是i + 1,因为一个树枝上可以重复选
backtracking(candidates, sum, target, i);
// 回溯
paths.pop_back();
sum -= candidates[i];
}
}
vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
result.clear();
sort(candidates.begin(), candidates.end());
backtracking(candidates, 0, target, 0);
return result;
}
};
代码(三刷自解 2024年5月22日)
class Solution {
public:
vector<vector<int>> res;
vector<int> path;
void backtracking(vector<int>& candidates,int target, int sum, int startIndex) {
if (sum > target) return;
if (sum == target) {
res.push_back(path);
return;
}
for (int i = startIndex; i < candidates.size() && candidates[i] <= target; i++) {
path.push_back(candidates[i]);
backtracking(candidates, target, sum + candidates[i], i);
path.pop_back();
}
}
vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
res.clear();
path.clear();
sort(candidates.begin(), candidates.end());
if(candidates[0] > target) return res;
backtracking(candidates, target, 0, 0);
return res;
}
};