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

加限制条件的回溯法,很典型,具有代表性

posted on 2018-07-31 19:59  高数考了59  阅读(114)  评论(0)    收藏  举报