因为有重复,且只能只用一次,所以要排序一下,以及使用一个used
class Solution {
private:
vector<vector<int>>result;
vector<int>path;
void backtracking(vector<int>& candidates,int target, int sum,int starindex, vector<bool>& used)
{
if(sum==target)
{
result.push_back(path);
return;
}
for(int i=starindex;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;
backtracking(candidates,target,sum,i+1,used);
used[i] = false;
sum-=candidates[i];
path.pop_back();
}
}
public:
vector<vector<int>> combinationSum2(vector<int>& candidates, int target) {
vector<bool> used(candidates.size(), false);
result.clear();
path.clear();
sort(candidates.begin(), candidates.end());
backtracking(candidates,target,0,0,used);
return result;
}
};