您的位置:首页 > 其它

LeetCode 039 Combination Sum

2015-12-24 20:02 302 查看
给你一个没有排序的序列和一个target,求出序列的和的值为target,允许序列中选择的值可以重复。

直接用递归。由于需要答案有序,所以先把序列排序,然后再递归的时候不能选择比上一次小的值,可以避免重复的计算。

其中不要随便运用vector<int>uu中的uu.size()-1这个数,会出错的,当uu.size()为0的时候。

class Solution {
public:

void get_ans(int ans,vector<int>& nums,vector<vector<int>>&an,vector<int> get_ss,int limit){
if(ans==0){an.push_back(get_ss);return ;}
for(int ii=0;ii<nums.size();ii++){
if(ans-nums[ii]<0||ii<limit)continue;
get_ss.push_back(nums[ii]);
get_ans(ans-nums[ii],nums,an,get_ss,ii);
get_ss.erase(get_ss.end()-1);
}
}
vector<vector<int>> combinationSum(vector<int>& candidates, int target) {
sort(candidates.begin(),candidates.end());
for(int ii=0;ii<candidates.size();ii++){
if(ii&&candidates[ii]==candidates[ii-1])candidates.erase(candidates.begin()+ii);
}
vector<vector<int>>yy;
vector<int>uu;
get_ans(target,candidates,yy,uu,0);
return yy;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: