class Solution {
public:
vector<vector<int> >res;
void dfs(int start,int curSum,vector<int>& path,const int& sz,const int& target,const vector<int>& candidates)
{
if(curSum>target)
{
return;
}
if(curSum==target)
{
res.push_back(path);
return;
}
if(start>=sz)
{
return;
}
dfs(start+1,curSum,path,sz,target,candidates);
path.push_back(candidates[start]);
dfs(start,curSum+candidates[start],path,sz,target,candidates);
path.pop_back();
}
vector<vector<int> > combinationSum(vector<int> &candidates, int target) {
if(candidates.size()==0)
{
return res;
}
sort(candidates.begin(),candidates.end());
vector<int>::iterator mend=unique(candidates.begin(),candidates.end());
int sz=mend-candidates.begin();
vector<int> path;
dfs(0,0,path,sz,target,candidates);
return res;
}
};
只要注意题目中允许多次选择同一个元素,所以在选择当前元素后,继续dfs时不需要将位置后移