Leetcode【39】:Combination Sum II

来源:互联网 发布:网络营销 seo 编辑:程序博客网 时间:2024/06/08 18:50

题目:前一题的改进,稍微麻烦些。给一堆数字(可能有重复)和一个target(都是正整数),求组合使数字之和==target。(每个数字只能用一次,组合以升序排列,组合不重复)

分析:可以直接在前一题基础上修改,

class Solution{public:vector<vector<int> > combinationSum2(vector<int> &candidates, int target){sort(candidates.begin(),candidates.end());vector<int> path;vector<vector<int> > res;dfs(candidates,target,0,path,res);return res;}void dfs(vector<int> &can, int left, int start, vector<int> &path, vector<vector<int> > &res){if(left==0){vector<vector<int> >::iterator iter;iter=find(res.begin(),res.end(),path);if(iter==res.end())res.push_back(path);return;//选择了比较懒的方式,直接去查找res中是否已存在path,防止组合重复。}for(int i=start;i<can.size();++i){//循环保证各种可能if(left<can[i])return;path.push_back(can[i]);dfs(can,left-can[i],i+1,path,res);//注意i+1,因为当前数字已经不能选了path.pop_back();}}};


0 0
原创粉丝点击