热题39 组合总和
要点:首先拿到题像这种求组合+限定条件,如果没有头绪可以递归得到所有可能解然后再加上对应限定条件
思路:都是正数则可以先排序,然后在小区间内搜索所有可能的集合,但是要求有不重复,所以有一个关键点在于使新插入的元素不能小于之前的元素,排序后这一点好满足,下标调整即可,很无脑菜狗的解法。
void digui(vector<int>& candidates, int target,vector<int> current,int len,int pos)
{
//len是小于target的元素个数,pos是当前下标的位置
int temp=msum(current); //循环求vector中总和
if(temp==target)
{
res.push_back(current);
return ;
}
else if(temp<target)
{
int i;
for(i=pos;i<len;i++)
{
current.push_back(candidates[i]);
//当插入一个元素时,下一个插入的元素从它的下标开始
digui(candidates,target,current,len,i);
current.pop_back();
}
}
else
{
current.pop_back();
return;
}
}