非递归的输出1-N的全排列实例(推荐)


Posted in Python onApril 11, 2017

网易游戏笔试题算法题之一,可以用C++,Java,Python,由于Python代码量较小,于是我选择Python语言。

算法总体思路是从1,2,3……N这个排列开始,一直计算下一个排列,直到输出N,N-1,……1为止

那么如何计算给定排列的下一个排列?

考虑[2,3,5,4,1]这个序列,从后往前寻找第一对递增的相邻数字,即3,5。那么3就是替换数,3所在的位置是替换点。

将3和替换点后面比3大的最小数交换,这里是4,得到[2,4,5,3,1]。然后再交换替换点后面的第一个数和最后一个数,即交换5,1。就得到下一个序列[2,4,1,3,5]

代码如下:

def arrange(pos_int):
  #将1-N放入列表tempList中,已方便处理
  tempList = [i+1 for i in range(pos_int)]
  print(tempList)

  while tempList != [pos_int-i for i in range(pos_int)]:
    for i in range(pos_int-1,-1,-1):
      if(tempList[i]>tempList[i-1]):
        #考虑tempList[i-1]后面比它大的元素中最小的,交换。
        minmax = min([k for k in tempList[i::] if k > tempList[i-1]])
        #得到minmax在tempList中的位置
        index = tempList.index(minmax)
        #交换
        temp = tempList[i-1]
        tempList[i-1] = tempList[index]
        tempList[index] = temp

        #再交换tempList[i]和最后一个元素,得到tempList的下一个排列
        temp = tempList[i]
        tempList[i] = tempList[pos_int-1]
        tempList[pos_int-1] = temp

        print(tempList)
        break
          
  
  
arrange(5)

以上这篇非递归的输出1-N的全排列实例(推荐)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python中关于时间和日期函数的常用计算总结(time和datatime)
Mar 08 Python
python 打印出所有的对象/模块的属性(实例代码)
Sep 11 Python
itchat-python搭建微信机器人(附示例)
Jun 11 Python
python 求一个列表中所有元素的乘积实例
Jun 11 Python
python 使用matplotlib 实现从文件中读取x,y坐标的可视化方法
Jul 04 Python
Python人工智能之路 之PyAudio 实现录音 自动化交互实现问答
Aug 13 Python
Django项目后台不挂断运行的方法
Aug 31 Python
Django框架 查询Extra功能实现解析
Sep 04 Python
Python Pandas 转换unix时间戳方式
Dec 07 Python
序列化Python对象的方法
Aug 01 Python
Python使用xpath实现图片爬取
Sep 16 Python
用python批量下载apk
Dec 29 Python
一个基于flask的web应用诞生(1)
Apr 11 #Python
Python 文件处理注意事项总结
Apr 10 #Python
python非递归全排列实现方法
Apr 10 #Python
python 生成器生成杨辉三角的方法(必看)
Apr 10 #Python
Python贪吃蛇游戏编写代码
Oct 26 #Python
OpenCV实现人脸识别
Apr 07 #Python
python使用opencv进行人脸识别
Apr 07 #Python
You might like
linux下 C语言对 php 扩展
2008/12/14 PHP
php 读取文件头判断文件类型的实现代码
2013/08/05 PHP
PHP根据传来的16进制颜色代码自动改变背景颜色
2014/06/13 PHP
PHP测试成功的邮件发送案例
2015/10/26 PHP
PHP中register_shutdown_function函数的基础介绍与用法详解
2017/11/28 PHP
ThinkPHP中图片按比例切割的代码实例
2019/03/08 PHP
PHP面向对象程序设计重载(overloading)操作详解
2019/06/13 PHP
jquery入门—编写一个导航条(可伸缩)
2013/01/07 Javascript
JS的location.href跳出框架打开新页面的方法
2014/09/04 Javascript
jQuery中parent()方法用法实例
2015/01/07 Javascript
jscript读写二进制文件的方法
2015/04/22 Javascript
JS实现带鼠标效果的头像及文章列表代码
2015/09/27 Javascript
JS操作COOKIE实现备忘记录的方法
2016/04/01 Javascript
关于安卓手机微信浏览器中使用XMLHttpRequest 2上传图片显示字节数为0的解决办法
2016/05/17 Javascript
jQuery密码强度验证控件使用详解
2017/01/05 Javascript
微信小程序page的生命周期和音频播放及监听实例详解
2017/04/07 Javascript
vue多页面项目中路由使用history模式的方法
2019/09/23 Javascript
微信小程序自定义头部导航栏(组件化)
2019/11/15 Javascript
JS数组降维的实现Array.prototype.concat.apply([], arr)
2020/04/28 Javascript
nuxt静态部署打包相对路径操作
2020/11/06 Javascript
[02:47]DOTA2亚洲邀请赛 HR战队出场宣传片
2015/02/07 DOTA
python 图片验证码代码分享
2012/07/04 Python
Python爬取Coursera课程资源的详细过程
2014/11/04 Python
Python数据结构与算法之列表(链表,linked list)简单实现
2017/10/30 Python
python使用pil库实现图片合成实例代码
2018/01/20 Python
Python如何将字符串转换为日期
2020/07/31 Python
python openpyxl模块的使用详解
2021/02/25 Python
Superdry瑞典官网:英国日本街头风品牌
2017/05/17 全球购物
Daisy London官网:英国最大的首饰集团IBB旗下
2019/02/28 全球购物
Python如何定义一个函数
2015/09/01 面试题
企业出纳岗位职责
2014/03/12 职场文书
乡镇爱国卫生月活动总结
2014/06/25 职场文书
小学阳光体育活动总结
2014/07/05 职场文书
小学教学工作总结2015
2015/05/13 职场文书
新娘婚礼答谢词
2015/09/29 职场文书
spring cloud 配置中心客户端启动遇到的问题
2021/09/25 Java/Android