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 42 43 44 45
| class Solution { public: vector<int> path; vector<vector<int>> result;
void backtracing(vector<int>& candidates, int target, int sum, int index, vector<bool>& used){ if(sum > target){ return ; }
if(sum == target){ result.push_back(path); return ; }
for(int i = index; i < candidates.size() && sum + candidates[i] <= target;i++){ if(i > 0 && candidates[i] == candidates[i - 1] && used[i - 1] == false){ continue; }
path.push_back(candidates[i]); sum += 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) { vector<bool> used(candidates.size(), false); result.clear(); path.clear();
sort(candidates.begin(), candidates.end());
backtracing(candidates, target, 0, 0, used);
return result; } };
|