- 解题思路:
- 本文要求给出所有符合条件的组合,考虑采用不会走回头路的回溯算法
- 注意:
1.递归退出条件
2.不走回头路设置
3.提前结束(break)
class Solution {
public:
vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
sort(candidates.begin(), candidates.end());
vector<int>path;
vector<vector<int>>res;
int sum = 0;
backtrace(candidates, path, res, target, sum,0);
return res;
}
void backtrace(const vector<int>&candidates, vector<int>&path, vector<vector<int>>&res, int target, int sum,int index) {
if (sum == target) {
res.push_back(path);
return;
}
for (int i = index; i < candidates.size();++i){
sum = sum + candidates[i];
if (sum <= target) {
path.push_back(candidates[i]);
backtrace(candidates, path, res, target, sum,i);
path.pop_back();
}else{
break;
}
sum = sum - candidates[i];
}
}
};