这道题其实就是考一个回溯,注意数组里面可能有重复的数,所以保证同一个坑里要装不同的数。
class Solution {
private:
vector<vector<int>>ans;
public:
vector<vector<int>> combinationSum2(vector<int>& candidates, int target) {
sort(candidates.begin(),candidates.end());
dfs(vector<int>(0),0,candidates,target);
return ans;
}
void dfs(vector<int>v,int start,vector<int>candidates,int target)
{
if(target == 0)
{
ans.push_back(v);
}
for(int i = start;i<candidates.size();i++)
{
if(target < candidates[i]) return ;
else
{
vector<int>tmp = v;
tmp.push_back(candidates[i]);
dfs(tmp,i+1,candidates,target-candidates[i]);
while(i+1 < candidates.size() && candidates[i] == candidates[i+1]){i++;}
}
}
}
};