目录
题目描述:
给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。
说明:解集不能包含重复的子集。
示例:
输入: [1,2,2]输出:[ [2], [1], [1,2,2], [2,2], [1,2], []]
解法:
class Solution {public: void subset(vector & nums, int pre, int copy, vector>& res){ } vector > subsetsWithDup(vector & nums) { int sz = nums.size(); if(sz == 0){ return {nums}; } sort(nums.begin(), nums.end()); vector > res(1); if(nums.front() == nums.back()){ for(int i = 0; i < sz; i++){ res.push_back(nums); nums.pop_back(); } }else{ int pre = nums.front() + 1; int copy = 1; int res_sz = 1; for(int i = 0; i < sz; i++){ if(nums[i] != pre){ copy = res_sz; pre = nums[i]; } for(int j = copy; j > 0; j--){ vector lst = res[res_sz - j]; lst.push_back(nums[i]); res.push_back(lst); } res_sz += copy; } } return res; }};