跳过正文
  1. leetcode 题解/

90_子集_II

·66 字·1 分钟

类型:数组

    1. 子集 II 💛

    https://leetcode-cn.com/problems/subsets-ii/

    ❓ 整数数组 nums 中可能包含重复元素,返回该数组所有可能的子集。解集不能包含重复的子集。返回的解集中,子集可以按任意顺序排列。

    💡 回溯法

    红框里面的要剪掉,具体来说是排序后,遍历到的当前元素与上一个元素相等时,则跳过。即下划线的这几个数 [1, 2, 2, 2, 4, 5, 5, 7] 。

    class Solution:
        def subsetsWithDup(self, nums: List[int]) -> List[List[int]]:
    
            nums.sort()
            n = len(nums)
            track = []
            ans = []
    
            def trackback(start):
                ans.append(track[:])
                for i in range(start, n):
                    if i > start and nums[i] == nums[i - 1]:
                        continue
                    track.append(nums[i])
                    trackback(i + 1)
                    track.pop()
    
            trackback(0)
            return ans