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

    问题描述

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

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

    示例:

    输入: nums = [1,2,3]
    输出:
    [
    [3],
      [1],
      [2],
      [1,2,3],
      [1,3],
      [2,3],
      [1,2],
      []
    ]

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

    解答

    '''
    
    深度优先搜索:画出递归树,深度优先遍历遍历即可。
    时间复杂度:O(n^2)
    
    '''
    
    class Solution(object):
        def subsets(self, nums):
            result = []
            def dfs(self, arr, nums, result):
                if len(nums) <= 0:
                    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
  • 相关阅读:
    仿微博添加和删除的动画
    到公司实习一个月记
    写一份好简历
    排序算法之快速排序
    PHP和MYSQL中的日期和时间
    我的php经历
    新的征程
    毕业设计笔记
    排序算法之总结
    javascript执行效率小结
  • 原文地址:https://www.cnblogs.com/xxxxxiaochuan/p/13230579.html
Copyright © 2011-2022 走看看