仅仅用作自己练习的记录用。
题目地址:
https://leetcode.com/problems/combination-sum/description/
大意就是说给你一串数字,从里面挑选(可重复)数字进行组合,数字之和为一个给定的数
class Solution {
public:
vector<vector<int> >ve;
vector<int>tmp;
int sum=0;
void handle(vector<int>& candidates, int target)
{
for(int j=0;j<candidates.size();j++)
{
int temp =sum+candidates[j];
if(temp==target)
{
if(tmp.size()>0&&tmp[tmp.size()-1]>candidates[j])
{
return;
}
tmp.push_back(candidates[j]);
//cout<<"tmp.size() = "<<tmp.size()<<endl;
ve.push_back(tmp);
tmp.pop_back();
return;
}
else if(temp<target)
{
if(tmp.size()>0&&tmp[tmp.size()-1]>candidates[j])
{
continue;
}
sum = temp;
tmp.push_back(candidates[j]);
handle(candidates,target);
tmp.pop_back();
sum = sum - candidates[j];
}
else{
return;
}
}
}
vector<vector<int> > combinationSum(vector<int>& candidates, int target) {
sort(candidates.begin(),candidates.end());
handle(candidates,target);
return ve;}
};