题目链接
class Solution {
public:
vector<vector<int>> result;
vector<int> path;
void backtracking1(vector<int> candidates, int target, int sum, int startIndex) {
if (sum >= target) {
if (sum == target) {
result.push_back(path);
}
return ;
}
for (int i = startIndex; i < candidates.size() && sum + candidates[i] <= target; i++) {
sum += candidates[i];
path.push_back(candidates[i]);
backtracking1(candidates, target,sum, i);
path.pop_back();
sum -= candidates[i];
}
}
vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
sort(candidates.begin(),candidates.end());
backtracking1(candidates, target, 0, 0);
return result;
}
};
总结
问题
- 开始出错,是因为没有考虑每次只能从自己开始,不能重复前面的数字了。
- 后来加上剪枝,出错是因为,没有对candidate排序