链接:
题目:
给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。
说明:解集不能包含重复的子集。
示例:
输入: [1,2,2] 输出: [ [2], [1], [1,2,2], [2,2], [1,2], [] ]
我的解法: 举例[1,2,2,2] [] -> [] [1] -> [] [1] [2] [1,2] -> 此时只append后1/2 [] [1] [2] [1,2] [2,2] [1,2,2] -> 此时只append后2/3 [] [1] [2] [1,2] [2,2] [1,2,2] [2,2,2] [1,2,2,2],则重复出现时,如果出现第二次,遍历从len(all_subsets) *1/2开始,出现第三次,遍历从len(all_subsets) *2/3开始
class Solution(object):
def subsetsWithDup(self, nums):
all_subsets = [[]]
nums.sort()
if nums:
for i in range(len(nums)):
# 重复的情况
if i>0 and nums[i]==nums[i-1]:
num += 1
start = len(all_subsets) * (num - 1)/num
for idx in range(start, len(all_subsets)):
all_subsets.append(all_subsets[idx]+[nums[i]])
# 非重复出现时,全遍历
else:
num = 1
for idx in range(len(all_subsets)):
all_subsets.append(all_subsets[idx]+[nums[i]])
return all_subsets