1 class Solution 
 2 {
 3 public:
 4     vector<vector<int>> combinationSum2(vector<int>& candidates, int target) 
 5     {
 6         vector<vector<int>> res;
 7         vector<int> cur;
 8         sort(candidates.begin(),candidates.end());
 9         helper(res,candidates,cur,target,0);
10         return res;
11     }
12     
13     void helper(vector<vector<int>> &res,vector<int> &candidates,vector<int> &cur,int target,int index)
14     {
15         if(target<0)
16             return;
17         if(target==0)
18         {
19             res.push_back(cur);
20             return;
21         }
22         int sz=candidates.size();
23         for(int i=index;i<sz;i++)
24         {
25             cur.push_back(candidates[i]);
26             helper(res,candidates,cur,target-candidates[i],i+1);
27             cur.pop_back();
28             while(i+1!=sz&&candidates[i+1]==candidates[i])
29                 i++;
30         }
31     }
32 };

要注意排除重复元素,并且在下一次迭代时,从下一个元素的位置开始

posted on 2018-07-10 13:49  高数考了59  阅读(106)  评论(0)    收藏  举报