Subsets II
Given a collection of integers that might contain duplicates, nums, return all possible subsets.
Note:
- Elements in a subset must be in non-descending order.
- The solution set must not contain duplicate subsets.
For example,
If nums = [1,2,2]
, a solution is:
[ [2], [1], [1,2,2], [2,2], [1,2], [] ]
题意:求子集 但数组中有重复元素
解题思路:记录重复元素每次插入的起点位置
class Solution { public: vector<vector<int>> subsetsWithDup(vector<int>& nums) { // IMPORTANT: Please reset any member data you declared, as // the same Solution instance will be reused for each test case. sort(nums.begin(), nums.end()); vector<vector<int> > v2; v2.push_back(vector<int>()); //0 int n = nums.size(); int prevSize = 0; //上一次插入时集合的大小 int prevValue = nums[0]; //上一次插入时的元素值 for(int i = 0; i < n; i++){ int curSize = v2.size(); int startIdx = 0; if(nums[i] == prevValue){ startIdx = prevSize; //新的拷贝插入起点 } prevSize = curSize; for(int j = startIdx; j < curSize; j++){ vector<int> v(v2[j]); v.push_back(nums[i]); v2.push_back(v); } prevValue = nums[i]; } return v2; } };