链接:
题目:
给定一个可能包含重复元素的整数数组 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
本文详细解析了 LeetCode 上子集 II 问题的解决方案,针对包含重复元素的整数数组,介绍了如何生成所有可能的不重复子集(幂集)。通过示例 [1,2,2] 展示了解法的具体步骤,包括如何处理重复元素以避免重复子集的生成。

2万+

被折叠的 条评论
为什么被折叠?



