• leetcode 【 Subsets 】python 实现


    题目

    Given a set of distinct integers, S, return all possible subsets.

    Note:

    • Elements in a subset must be in non-descending order.
    • The solution set must not contain duplicate subsets.

    For example,
    If S = [1,2,3], a solution is:

    [
      [3],
      [1],
      [2],
      [1,2,3],
      [1,3],
      [2,3],
      [1,2],
      []
    ]

    代码:oj测试通过 Runtime: 71 ms

     1 class Solution:
     2     # @param S, a list of integer
     3     # @return a list of lists of integer
     4     def dfs(self, start, S, result, father_subsets):
     5         result.append(father_subsets)
     6         for i in range(start, len(S)):
     7             self.dfs(i+1, S, result, father_subsets+[S[i]])
     8     def subsets(self, S):
     9         # none case
    10         if S is None:
    11             return []
    12         # deep first search
    13         result = []
    14         self.dfs(0, sorted(S), result, [])
    15         return result

    思路

    深度优先遍历本科时候学过,四五年不看了都忘光了,通过这道题捡起来一些。

    总体思路是深度优先算法回溯。

    1. 先处理输入为空的special case

    2. 定义一个存放返回结果的数组result

    3. 以题目中给的按照题意进行深度优先遍历:

      []

      1→12→123

       →13

      2→23

      3

    按照上面的便利顺序遍历,就可以得到所有的子集(要包括空元素)

    具体的解释是

    第一轮深度遍历:把以1开头的先都列出来→以1开头的,后接数组剩余元素中最小的元素(这个元素是2)→以12开头的,后接数组剩余元素中最小的元素(这个元素是3)→到头了

    这样一个深度就遍历出来了[1] [1,2] [1,2,3]三个子集

    第二轮深度遍历: 可以遍历出来[2] [23,]两个子集

    第三轮深度遍历: 可以遍历出来[3]一个子集

    每轮都传递一个数组起始指针的值,来保证上述遍历顺序。

    这样3轮遍历保证能找到全部1开头,2开头,3开头的所有子集;同时,由于每轮遍历后又把上轮的头元素去掉,保证不会出现重复子集。

    4. 这个代码主要出于简洁性的考虑,每次调用dfs都传递数组S,多少影响了效率。

    5. 另外,还有一个小坑就是pyhton的list.sort()函数。这个函数返回的是NoneType,之前提交了几次都不通过,后来查了一下。找到了这篇日志:

    http://blog.csdn.net/trochiluses/article/details/16863871

    后来改用内建函数sorted()就好了

  • 相关阅读:
    C Primer+Plus(十七)高级数据表示 复习题
    C Primer+Plus(十七)高级数据表示(三)
    C Primer+Plus(十七)高级数据表示(二)
    C Primer+Plus(十七)高级数据表示(一)
    C Primer+Plus(十四)编程练习
    AI时代什么最重要,什么是AI时代的基础资产?
    AI在哪些领域里都有哪些应用?
    什么是AI、大数据、深度学习......它们之间什么关系?
    说话的套路
    全书结构
  • 原文地址:https://www.cnblogs.com/xbf9xbf/p/4253208.html
Copyright © 2020-2023  润新知