思路
和之前几道组合的题目差不多,不同的是允许元素重复,所以要求单层递归里的for循环从当前的index开始即可
代码
class Solution {
public:int curSum;vector<int> path;vector< vector<int> > result;void backtracking(vector<int>& candidates, int curIndex, int target){if(curSum > target) return;if(curSum == target){result.push_back(path);return;}for(int i = curIndex; i < candidates.size(); i++){path.push_back(candidates[i]);curSum += candidates[i];backtracking(candidates, i, target);path.pop_back();curSum -= candidates[i];}return;}vector<vector<int>> combinationSum(vector<int>& candidates, int target) {backtracking(candidates, 0, target);return result;}
};