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
  • 相关阅读:
    kubernetes 用到的工具及组件
    kubernetes整个基础环境的准备
    docker可视化管理Portainer
    Docker Swarm的命令
    Docker网络设置及文件挂载
    Docker常见命令
    Docker 中国官方镜像加速
    Docker安装
    k8s中教你快速写一条yaml文件
    Kubernetes CoreDNS 状态是 CrashLoopBackOff 报错
  • 原文地址:https://www.cnblogs.com/xxxxxiaochuan/p/13230784.html
Copyright © 2011-2022 走看看