zoukankan      html  css  js  c++  java
  • 90. 子集 II-递归+dfs-中等难度

    题目描述

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

    说明:解集不能包含重复的子集。

    示例:

    输入: [1,2,2]
    输出:
    [
    [2],
    [1],
    [1,2,2],
    [2,2],
    [1,2],
    []
    ]

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/subsets-ii

    解题

    '''

    递归dfs:
    因为有重复元素,所以先对nums进行排序。
    然后再画出递归树,使用深度优先遍历。

    '''
    class Solution(object):
        def subsetsWithDup(self, nums):
            nums.sort()
            result = []
            def dfs(self, arr, nums, result):
                if len(nums) <= 0:
                    if arr not in result:
                        result.append([]) #不能直接append(arr),因为append直接将arr的地址添加进去,导致后面arr值的改变会改变result中的arr的值。
                        result[-1].extend(arr)
                    return 0
                arr.append(nums[0])
                dfs(self, arr, nums[1:], result)
                arr.pop()
                dfs(self, arr, nums[1:], result)

            dfs(self, [], nums, result)
            return result
  • 相关阅读:
    Oracle SGA详解
    oracle如何保证读一致性 第一弹
    Make命令完全详解教程
    ProC第三弹
    ProC第一弹
    ProC第二弹
    $(MAKE) , make命令
    转:跟我一起写Makefile (PDF重制版)
    [bzoj1105][POI2007]石头花园SKA
    可并堆学习
  • 原文地址:https://www.cnblogs.com/xxxxxiaochuan/p/13230784.html
Copyright © 2011-2022 走看看