数字全排列的python算法实现

来源 :理论与创新 | 被引量 : 0次 | 上传用户:liuqingq
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  【摘  要】在学习算法刷题过程中,很多人选择leetcode这个平台来进行。本文对leetcode平台第46题全排列[1]进行了详细分析,并对[2]中给出的代码做了优化,最后用一行python代码实现了全排列功能。
  【关键词】全排列; leetcode;python
  引言
  在美国互联网发展的过程中,美国企业面对着招聘需求增长,采用了写题为主的面试方法论。时至今日,像Google、FaceBook、Amazon等公司,依然保留和沿用着以写题为主的面试方法。于是,就有了Leetcode和中文版的Leetcode。
  本文对Leetcode第46题全排列[1]进行了详细的分析,并给出了一行python改进解法。
  1.Leetcode第46题内容介绍
  46题:给定一个没有重复数字的序列,返回其所有可能的全排列。
  示例: 输入: [1,2,3]
  输出: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ]
  1.1题目分析
  看完题目,以及给出的示例输入输出,可以发现这就是一个普通的全排列问题,输入一个整型的数组,输出是一个数组,同时数组中的每一个元素就是一个排列。
  1.2解题思路
  参考文献[3]和[4],“回溯”算法也叫“回溯搜索”算法, “回溯”指的是“状态重置”,可以理解为“回到过去”、“恢复现场”,是在编码的过程中,是为了节约空间而使用的一种技巧。而回溯其实是“深度优先遍历”特有的一种现象。 “全排列”就是一个非常经典的“回溯”算法的应用。我们知道,N 个数字的全排列一共有 N! 这么多个。
  “全排列”问题的树形结构如下所示:
  使用编程的方法得到全排列,就是在这样的一个树形结构中进行编程,具体来说,就是执行一次深度优先遍历,从树的根结点到叶子结点形成的路 就是一个全排列。
  2.编码步骤:
  (1)首先这棵树除了根结点和叶子结点以外,每一个结点做的事情其实是一样的,即在已经选了一些数的前提,我们需要在剩下还没有选择的数中按照顺序依次选择一个数;
  (2)递归的终止条件是,数已经选够了,因此我们需要一个变量来表示当前递归到第几层,我们把这个变量叫做 depth;
  (3)这些结点实际上表示了搜索(查找)全排列问题的不同阶段,为了区分这些不同阶段,我们就需要一些变量来记录为了得到一个全排列,程序进行到哪一步了,在这里我们需要两个变量:
  (4)在非叶子结点处,产生不同的分支,这一操作的语义是:在还未选择的数中依次选择一个元素作为下一个位置的元素,这显然得通过一个循环实现。
  3.代码的编写
  由于编写代码采用的python语言,可以充分利用python的精简的风格和特殊的语法糖,直接给出一行python代码如下:
  class Solution:
  def permute(self, nums: List[int]) -> List[List[int]]:
   return [ p[:i] + [nums[0]] + p[i:]
   for i in range(len(nums))
   for p in self.permute(nums[1:])
   ]  or [[]]
  該代码对文献[2]中的代码进行了简化,是本文的一个精简的改进。
  由于是Leetcode中提交的形式,所以这个代码在普通的环境中是无法执行的。
  4.小结
  本文用一行python代码实现了leetcode46题全排列,并且对文献[2]的代码进行了精简的改进。
  参考文献
  [1] https://leetcode-cn.com/problems/permutations/
  [2] https://leetcode.com/problems/permutations/discuss/18241/One-Liners-in-Python
  [3] 胡松涛。 图解LeetCode初级算法(Python版). 北京:清华大学出版社,2020.
  [4]https://leetcode-cn.com/problems/permutations/solution/hui-su-suan-fa-python-dai-ma-java-dai-ma-by-liweiw/
其他文献
【摘 要】在煤炭深加工中,洗煤厂作为不可缺少的一个环节,主要是通过水流的冲击作用,把不同成分不同比重的原煤分出不同等级,并除去尘土和矸石,从而降低煤炭灰分,提高煤质发热量。机电设备是煤炭洗选过程中的重要工具,其长期处于恶劣的生产环境中,加强机电设备的维护与管理不仅能够减少设备故障,而且能够延长设备使用寿命,同时能够提高生产效率。本文简要介绍了洗煤厂机电设备管理与维护的工作特点,重点分析了洗煤厂机电
期刊
【摘 要】血压时判断人体健康的重要指标,同时也是人体中十分重要的生命体征之一。精确测量血压对于判断健康状况有着十分重要的影响,而血压计时测量血压的主要工具之一,现如今血压计的种类较为繁多,其中水银柱式血压计的使用最为广泛且稳定,成为人们日常生活和临床中的重要测量工具。这种血压计使用时间长,频率高,所以其出现故障的几率较大。基于此,本文首先分析水银柱血压计的检定要求和方法,继而探讨血压计计量检定常见
期刊
【摘 要】我国坚持科学发展观,走可持续发展道路,绿色矿山建设主张科学合理,开发利用矿山资源要制定先进的有效措施,综合可持续发展观念进行创新,采矿工艺是矿山建设的重要问题,选择正确的工艺方法能够提高劳动生产率,促进绿色矿山建设。绿色矿山的建设比较复杂,充填采矿的应用有利于生态保护,有效地实现绿色矿山建设。本文主要阐述充填采矿与绿色矿山建设的基本情况,具体内容见下文。  【关键词】充填采矿;绿色矿山;
期刊
【摘 要】文章以300MW循环流化床锅炉为切入点,以陕西郭家湾电厂为研究对象,针对其锅炉深度调峰技术的应用过程与效果进行分析,旨在明确深度调峰工作的实质作用。首先阐述深度调峰的目的,并且对锅炉设备进行概述,其次围绕该锅炉进行110MW,100MW,90MW等负荷段的调峰测试,最后对调整测试结果进行总结,希望对相关研究人员提供参考与借鉴。  【关键词】循环流化床;深度调峰;应用效果  引言  近些年
期刊
【摘 要】在社会经济不断发展背景下,我国对矿产资源的需求也越来越迫切。不合理的矿业资源开发不仅容易造成严重的生态环境破坏,而且会对地表环境产生深刻的影响,因此,如何科学合理地开发利用矿产资源成了当前我国绿色生态环境建设亟待解决的问题。下面,本文将从矿山设计论证阶段、矿山开采生产阶段以及矿山闭坑终止阶段三个方面对绿色开采生态矿山进行详细的分析。  【关键词】绿色开采;生态矿山;建设  引言  面对日
期刊
【摘 要】根据高速动车组日常试验情况,讨论了高速动车组各种试验情况下的全面维保体系的建立,用以推进动车组试验快速可靠进行。  【关键词】动车组;试验;维保  1.产品全寿命周期各阶段梳理  高速動车组自设计策划至寿命到期,主要寿命周期阶段划分如下:  设计策划→方案设计→技术设计→施工设计→样车试制→车辆回送→型式试验→运用考核→返厂拆解→评估优化→批量生产→交付用户→车辆回送→运用检修→寿命到期
期刊
【摘 要】随着近些年计算机多媒体技术在相关领域的突出表现,为社会高速发展提供了极大的助力,具体表现在通讯,医疗,教育等重要领域。本文从计算机多媒体技术具体事项出发,对多媒体技术在当今社会重点使用的行业做出简述,并针对未来发展的方向做出了一定预测,促使计算机多媒体技术能够为行业,为经济,为社会创造出前所未有的价值。  【关键词】计算机多媒体技术;应用;未来发展  引言  计算机技术的发展速度是快不可
期刊
【摘 要】在新时期,为了更好促进我国制造行业的健康发展,国家提出了智能制造2025发展规划纲要,这份纲要对机械制造领域做出了全新的部署和要求,起到了引领和促进作用。机械自动化技术的发展和应用能够有效促进机械制造领域的升级换代,大大提高机械化产品的生产效率和生产质量,更好的满足我制造业的发展要求,大大降低机械产品的制造成本,更好地提高机械制造企业的经济效益。但我国机械自动化技术的发展还处于初级阶段,
期刊
【摘 要】伴随社会经济的发展,科学技术的研究逐渐进步,现如今人们越来越重视绿色节能环保技术,更好的保护生态环境,在经济发展的过程中也始终坚持与生态环境相互适应,从而促进经济社会可持续发展。通过对制冷系统设备进行合理设计,选择合适的参数便可以提高整体系统的制冷效果,降低能源的消耗,在获得最佳经济效益的基础上保护生态环境。本文便主要讲述了地铁车辆空调制冷系统的节能设计,以此来供相关人士参考与交流。  
期刊
【摘 要】水资源质量控制是城市发展的重要组成部分。为了能够有效地进行水质分析,必须在水质分析中全面检查质量控制的有效性。检查水质时,需要许多复杂的工作项目,例如重复抽样测试,对相关数据进行有效的统计分析,这些过程中很容易出现实验室错误。运用有效的水质检测质量控制方法确定样品,然后对影响水质的因素进行综合分析,并提出相应的控制措施,以有效提高水质检测的科学性和准确性。在此基础上,本文简要介绍了水质分
期刊