1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| class Solution { public: vector<vector<int>> result; vector<int> path;
void backtracing(vector<int>& candidates, int target, int sum, int startIndex,vector<bool>& used){ if(sum ==target){ result.push_back(path); return; }
for(int i = startIndex;i < candidates.size() && sum + candidates[i] <= target;i++){ if(i > 0 && candidates[i] == candidates[i-1] && used[i - 1]==false){ continue; }
sum += candidates[i]; path.push_back(candidates[i]); used[i] = true; backtracing(candidates, target, sum, i + 1, used); used[i] = false; sum -= candidates[i]; path.pop_back(); } }
vector<vector<int>> combinationSum2(vector<int>& candidates, int target) { result.clear(); path.clear(); vector<bool> used(candidates.size(), false); sort(candidates.begin(), candidates.end()); backtracing(candidates, target, 0, 0, used); return result; } };
|