给你一个整数数组 nums ,其中可能包含重复元素,请你返回该数组所有可能的子集(幂集)。
解集 不能 包含重复的子集。返回的解集中,子集可以按 任意顺序 排列。
样例输入:nums = [1,2,2]
输出:[[],[1],[1,2],[1,2,2],[2],[2,2]]
1 <= nums.length <= 10
-10 <= nums[i] <= 10
记录没元素重复的个数,然后深搜的时候按重复的个数加入队列进行下一个搜索。
注意点 ac代码 c++:class Solution {
public:
void dfs(vector &nums,vector> &result,vector &now,int j,vector &member)
{
for(int i=j+1;i
int x;
if(nums[i]<0)
x=-nums[i]+10;
else
x=nums[i];
for(int z=0;z
now.push_back(nums[i]);
dfs(nums,result,now,i,member);
}
for(int z=0;z> subsetsWithDup(vector& nums) {
vector member(22,0);
vector> result;
vector now;
vector nums1;
for(int i=0;i
if(nums[i]>=0)
member[nums[i]]++;
else
member[-nums[i]+10]++;
}
for(int i=0;i<11;i++)
if(member[i])
nums1.push_back(i);
for(int i=11;i<21;i++)
if(member[i])
nums1.push_back(-(i-10));
//nums1存储新数组(不含重复数据),member存储每个数的个数
for(int i=0;i
int x;
if(nums1[i]<0)
x=-nums1[i]+10;
else
x=nums1[i];
for(int z=0;z
now.push_back(nums1[i]);
dfs(nums1,result,now,i,member);
}
for(int z=0;z
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/squares-of-a-sorted-array
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。



