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 };
加限制条件的回溯法,很典型,具有代表性