您的位置:首页 > 其它

40. Combination Sum II

2016-03-19 20:51 483 查看
//与上一题区别不大,只是需要判断,别与之前的重复。8ms
class Solution {
public:
void backtracking(vector<vector<int>> &v,vector<int> &temp,vector<int> &candidates,int target,int index)
{
if(target==0)
{
v.push_back(temp);
return;
}
for(int i=index;i<candidates.size();i++)
{
if(candidates[i]>target) break;
if(temp.size()==0&&i!=0&&candidates[i]==candidates[i-1]) continue;
if(v.size()!=0&&v[v.size()-1].size()>temp.size()&&v[v.size()-1][temp.size()]==candidates[i])
{
bool flag=true;
for(int j=0;j<temp.size();j++)
{
if(v[v.size()-1][j]!=temp[j])
{
flag=false;
break;
}
}
if(flag) continue;
}
temp.push_back(candidates[i]);
backtracking(v,temp,candidates,target-candidates[i],i+1);
temp.pop_back();
}
}
vector<vector<int>> combinationSum2(vector<int>& candidates, int target) {
vector<vector<int>> v;
sort(candidates.begin(),candidates.end());
vector<int> temp;
backtracking(v,temp,candidates,target,0);
return v;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: