class Solution {
public:
vector<vector<int> > combinationSum2(vector<int> &num, int target) {
sort(num.begin(),num.end());
vector<vector<int> > ret(combinationSum(num,0,target));
sort(ret.begin(),ret.end());
ret.erase(unique(ret.begin(),ret.end()),ret.end());
return ret;
}
vector<vector<int> > combinationSum(const vector<int> &candidates,int index,int target)
{//index 标识可以使用的域
vector<vector<int> > result;
if(index>=candidates.size())
{
return result;
}
//剪枝
if(candidates[index] > target)
{
return result;
}
if(candidates[index]==target)
{
vector<int> unit(1,target);
result.push_back(unit);
return result;
}
for(int i=index;i<candidates.size();i++)
{
int times=1;//第i个元素重复出现的次数
if(candidates[i]*times<=target)
{
if(candidates[i]*times==target)
{
vector<int> unit(times,candidates[i]);
result.push_back(unit);
}
else
{
vector<vector<int> > ret(combinationSum(candidates,i+1,target-candidates[i]*times));
for(int j=0;j<ret.size();j++)
{
vector<int> unit(times,candidates[i]);
if(!ret[j].empty())
{
unit.insert(unit.end(),ret[j].begin(),ret[j].end());
result.push_back(unit);
}
}
}
}
}
return result;
}
};
Combination Sum II
最新推荐文章于 2021-02-23 05:50:14 发布