leetcode_0090 子集 II

208 阅读1分钟

要求:

给你一个整数数组 nums ,其中可能包含重复元素,请你返回该数组所有可能的子集(幂集)。

解集 不能 包含重复的子集。返回的解集中,子集可以按 任意顺序 排列。

  • 示例 1
 输入:nums = [1,2,2]
 输出:[[],[1],[1,2],[1,2,2],[2],[2,2]]
  • 示例 2
 输入:nums = [0]
 输出:[[],[0]]

详解代码

 class Solution(object):
     def subsetsWithDup(self, nums):
         result = [[]]
         for num in nums:
             for index in range(len(result)):
                 new_list = result[index] + [num]
                 new_list.sort()
                 result.append(new_list)
         unique = set(tuple(val) for val in result)
         return list(list(val) for val in unique)

image.png 解题思路:和子集Ⅰ的解题思路是一样的,我们不断其中的已有元素的列表追加元素,但是多了个步骤,对新和成的列表进行排序,免得[1,2,2]和[2,1,2]认为是不同的,最后借助set进行去重。