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