1. 题目描述
给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。
说明:解集不能包含重复的子集。
示例:
输入: [1,2,2]
输出:
[
[2],
[1],
[1,2,2],
[2,2],
[1,2],
[]
]
2. 解题思路
这题思路也是回溯法,跟题目求子集https://blog.csdn.net/u013075024/article/details/93631767有类似的思路。不同的是这题要求子集不重复,所以先对原始数组进行排序,然后在加入列表之前判断该子集是否存在,若不存在,则加入。
3.代码实现
class Solution:
def subsetsWithDup(self, nums):
self.res = []
self.search(sorted(nums), 0,self.res, [])
return self.res
def search(self, nums, index, res, temp):
if(index == len(nums)):
if(temp not in res):
res.append(temp)
return
self.search(nums, index+1, res, temp + [nums[index]])
self.search(nums, index+1, res, temp)