这个能不能不递归呢?
void recursiveSum2(vector<int> &candidates,int target,vector<int> &res,vector<vector<int> > &ret,int n)
{
if (n==candidates.size())
{
return ;
}
if (candidates[n]==target)
{
res.push_back(candidates[n]);
ret.push_back(res);
res.pop_back();
}
else
{
if (candidates[n]<target)
{
res.push_back(candidates[n]);
for(int i=n+1;i<candidates.size()&&candidates[i]<target;i++)
{
recursiveSum2(candidates,target-candidates[n],res,ret,i);
}
res.pop_back();
}
else
return ;
}
}
vector<vector<int> > combinationSum2(vector<int> &num, int target) {
sort(num.begin(),num.end());
vector<int> res;
vector<vector<int> >ret;
for (int i=0;i<num.size()&&num[i]<=target;i++)
{
recursiveSum2(num,target,res,ret,i);
}
sort(ret.begin(),ret.end());
ret.erase(unique(ret.begin(),ret.end()),ret.end());
return ret;
}
为什么后面要排序和去重复,思考给的例子,1 1 2 5 6 7 10 ,target=8,第一个1 和后面的2,5是一组,第二个1和后面的2,5 又是一组。