博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
leetcode 【 Subsets 】python 实现
阅读量:6276 次
发布时间:2019-06-22

本文共 1473 字,大约阅读时间需要 4 分钟。

题目

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 case10         if S is None:11             return []12         # deep first search13         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,之前提交了几次都不通过,后来查了一下。找到了这篇日志:

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

转载于:https://www.cnblogs.com/xbf9xbf/p/4253208.html

你可能感兴趣的文章
Javascript 中的 Array 操作
查看>>
java中包容易出现的错误及权限问题
查看>>
AngularJS之初级Route【一】(六)
查看>>
服务器硬件问题整理的一点总结
查看>>
SAP S/4HANA Cloud: Revolutionizing the Next Generation of Cloud ERP
查看>>
Mellanox公司计划利用系统芯片提升存储产品速度
查看>>
白帽子守护网络安全,高薪酬成大学生就业首选!
查看>>
ARM想将芯片装进人类大脑 降低能耗是一大挑战
查看>>
Oracle数据库的备份方法
查看>>
Selenium 自动登录考勤系统
查看>>
关于如何以编程的方式执行TestNG
查看>>
智能照明造福千家万户 家居智能不再是梦
查看>>
物联网如何跳出“看起来很美”?
查看>>
浅谈MySQL 数据库性能优化
查看>>
《UNIX/Linux 系统管理技术手册(第四版)》——1.10 其他的权威文档
查看>>
灵动空间 创享生活
查看>>
《UNIX网络编程 卷1:套接字联网API(第3版)》——8.6 UDP回射客户程序:dg_cli函数...
查看>>
不要将时间浪费到编写完美代码上
查看>>
《第一桶金怎么赚——淘宝开店创业致富一册通》一一第1章 创业梦想,怎样起步...
查看>>
基于容器服务的持续集成与云端交付(三)- 从零搭建持续交付系统
查看>>