非递归的输出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实现下载网易云音乐的高清MV
Mar 16 Python
python写入中英文字符串到文件的方法
May 06 Python
Python实现的RSS阅读器实例
Jul 25 Python
Python守护进程和脚本单例运行详解
Jan 06 Python
用python编写第一个IDA插件的实例
May 29 Python
Python OpenCV实现鼠标画框效果
Aug 19 Python
python 普通克里金(Kriging)法的实现
Dec 19 Python
python GUI库图形界面开发之PyQt5信号与槽机制、自定义信号基础介绍
Feb 25 Python
python属于哪种语言
Aug 16 Python
python 装饰器的实际作用有哪些
Sep 07 Python
Python爬取英雄联盟MSI直播间弹幕并生成词云图
Jun 01 Python
一篇文章带你了解Python和Java的正则表达式对比
Sep 15 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
PHP中require和include路径问题详解
2014/12/25 PHP
php实现字符串反转输出的方法
2015/03/14 PHP
详解PHP原生DOM对象操作XML的方法
2016/10/17 PHP
PHP验证类的封装与使用方法详解
2019/01/10 PHP
PHP中上传文件打印错误错误类型分析
2019/04/14 PHP
Document:getElementsByName()使用方法及示例
2013/10/28 Javascript
无闪烁更新网页内容JS实现
2013/12/19 Javascript
JS显示下拉列表框内全部元素的方法
2015/03/31 Javascript
Immutable 在 JavaScript 中的应用
2016/05/02 Javascript
javascript加减乘除的简单实例
2016/07/12 Javascript
浅谈JavaScript的innerWidth与innerHeight
2017/10/12 Javascript
手把手教你使用vue-cli脚手架(图文解析)
2017/11/08 Javascript
Vue 中的compile操作方法
2018/02/26 Javascript
解决vue脚手架项目打包后路由视图不显示的问题
2018/09/20 Javascript
vue构建动态表单的方法示例
2018/09/22 Javascript
基于JS实现web端录音与播放功能
2019/04/17 Javascript
vue通过数据过滤实现表格合并
2020/11/30 Javascript
node.js中stream流中可读流和可写流的实现与使用方法实例分析
2020/02/13 Javascript
jQuery实现的移动端图片缩放功能组件示例
2020/05/01 jQuery
Python面向对象之类和对象属性的增删改查操作示例
2018/12/14 Python
Python环境Pillow( PIL )图像处理工具使用解析
2019/09/12 Python
基于K.image_data_format() == 'channels_first' 的理解
2020/06/29 Python
解析html5 canvas实现背景鼠标连线动态效果代码
2019/06/17 HTML / CSS
HTML5中在title标题标签里设置小图标的方法
2020/06/23 HTML / CSS
戴森英国官网:Dyson英国
2019/05/07 全球购物
如何开启linux的ssh服务
2015/02/14 面试题
建筑个人求职信范文
2014/01/25 职场文书
化学专业大学生职业生涯规划范文
2014/09/13 职场文书
2014年最新个人对照检查材料范文
2014/09/25 职场文书
社区个人对照检查材料(群众路线)
2014/09/26 职场文书
2014年电信员工工作总结
2014/12/19 职场文书
国庆庆典邀请函
2015/02/02 职场文书
2015年消防工作总结
2015/04/24 职场文书
党员心得体会范文2016
2016/01/23 职场文书
nginx的zabbix 5.0安装部署的方法步骤
2021/07/16 Servers
html中相对位置与绝对位置的具体使用
2022/05/15 HTML / CSS