思路——回溯
- 确定递归参数,返回值
- 确定递归终止条件
- 确定单层搜索逻辑
- 数组排序,剪枝,加快搜索
代码
class Solution {
private:
vector<vector<int>> result;
vector<int> path;
void backtracking(vector<int>& candidates, int target, int startIndex){
if (target==0) {
result.push_back(path);
return;
}
for (int i = startIndex; i < candidates.size() && target-candidates[i] >= 0; i++) {
path.push_back(candidates[i]);
backtracking(candidates, target-candidates[i], i);
path.pop_back();
}
}
public:
vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
sort(candidates.begin(), candidates.end());
backtracking(candidates, target, 0);
return result;
}
};