【数组】90. 子集 II

题目:

 

 

解答:

 1 class Solution {
 2 public:
 3     vector<vector<int>> res;
 4 
 5     vector<vector<int>> subsetsWithDup(vector<int>& nums) 
 6     {
 7         // 为啥排序啊??
 8         sort(nums.begin(),nums.end());  // 区别1
 9         // 记录走过的路径
10         vector<int> track;
11         backtrack(nums, 0, track);
12         return res;
13     }
14 
15     void backtrack(vector<int>& nums, int start, vector<int>& track) 
16     {
17         res.push_back(track);
18         // 注意 i 从 start 开始递增
19         for (int i = start; i < nums.size(); i++) 
20         {
21             if (i > start && nums[i] == nums[i - 1])    // 区别2
22             {
23                 continue;
24             }
25             // 做选择
26             track.push_back(nums[i]);
27             // 回溯
28             backtrack(nums, i + 1, track);
29             // 撤销选择
30             track.pop_back();
31         }
32     }
33 };

 

posted @ 2020-05-05 16:15  梦醒潇湘  阅读(116)  评论(0)    收藏  举报