1.
这道题的关键在于每个数字只能出现一次,说明排序后如果有重复项则跳过,也可以在排序后直接对数组进行去重
class Solution {
public:
vector<vector<int>>ret;
vector<int>path;
void set(vector<int>&candidates,int target,int sum,int start)
{
if(sum==target)
{
ret.push_back(path);
return;
}
if(sum>target)
{
return;
}
for(int i=start;i<candidates.size();i++)
{
if(i>start&&candidates[i-1]==candidates[i])
{
continue;
}
sum+=candidates[i];
path.push_back(candidates[i]);
set(candidates,target,sum,i+1);
path.pop_back();
sum-=candidates[i];
}
}
vector<vector<int>> combinationSum2(vector<int>& candidates, int target) {
sort(candidates.begin(),candidates.end());
set(candidates,target,0,0);
return ret;
}
};