【数组】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 };

浙公网安备 33010602011771号