题目链接:39. 组合总和 - 力扣(LeetCode)
代码如下:
class Solution {
private:vector<vector<int>> result;vector<int> path;void backtracking(vector<int>& candidates, int target, int sum, int startIndex){if(sum > target){return ;}if(target == sum){result.push_back(path);return ;}for(int i = startIndex; i < candidates.size(); i++){sum += candidates[i];path.push_back(candidates[i]);backtracking(candidates, target, sum, i);sum -= candidates[i];path.pop_back();}}
public:vector<vector<int>> combinationSum(vector<int>& candidates, int target) {result.clear();path.clear();backtracking(candidates, target, 0, 0);return result;}
};
这个代码其实就是和前面的组合总是是一样的,但是呢,主要一点是,这个for循环里面的backtracking的不是i + 1了,而是i,因为当前i可以去取当前的元素,而i + 1是不能去当前的元素的。