您的位置:首页 > 编程语言 > C语言/C++

40. Combination Sum II

2016-09-22 21:04 375 查看

这道题是39题的改进,先要对数组进行排序,然后还要加一些限定元素,保证每个答案不一样,且每个元素只取一次。

class Solution {
public:
vector<vector<int> >result;
vector<int>temp;
vector<vector<int> > combinationSum2(vector<int>& candidates, int target)
{
sort(candidates.begin(),candidates.end());
if(candidates.empty())
return result;
dfs(candidates,target,0);
return result;
}
void dfs(vector<int>& candidates,int target,int start)
{
if(target<0)
return;
else if(0==target)
{
result.push_back(temp);
return;
}
else
{
for(int i=start;i<candidates.size();i++)
{
temp.push_back(candidates[i]);
dfs(candidates,target-candidates[i],i+1);//保证每个元素取一次
temp.pop_back();
while(candidates[i+1]==candidates[i])//保证答案不重复
++i;
}
}
}
};


class Solution {
public:
vector<vector<int> > combinationSum2(vector<int>& candidates, int target)
{
vector<vector<int> >result;
vector<int>temp;
if(candidates.empty())
return result;
sort(candidates.begin(),candidates.end());
dfs(candidates,target,0,result,temp);
return result;
}
void dfs(vector<int>& candidates,int target,int start,vector<vector<int> >&result,vector<int> &temp)
{
if(target<0)
return;
else if(0==target)
{
result.push_back(temp);
return;
}
else
{
for(int i=start;i<candidates.size();i++)
{
if(i!=start&&candidates[i]==candidates[i-1])
continue;
temp.push_back(candidates[i]);
dfs(candidates,target-candidates[i],i+1,result,temp);
temp.pop_back();
}
}
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C-C++