非递归的输出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用GET方法上传文件
Mar 10 Python
使用Python的urllib和urllib2模块制作爬虫的实例教程
Jan 20 Python
Python实现运行其他程序的四种方式实例分析
Aug 17 Python
Python数据结构之单链表详解
Sep 12 Python
Python探索之创建二叉树
Oct 25 Python
python os.fork() 循环输出方法
Aug 08 Python
对python中的*args与**kwgs的含义与作用详解
Aug 28 Python
TensorFlow2.0矩阵与向量的加减乘实例
Feb 07 Python
简单了解python列表和元组的区别
May 14 Python
Python装饰器如何实现修复过程解析
Sep 05 Python
Django debug为True时,css加载失败的解决方案
Apr 24 Python
Python内置类型集合set和frozenset的使用详解
Apr 26 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
动漫定律:眯眯眼都是怪物!这些角色狠话不多~
2020/03/03 日漫
PHP执行批量mysql语句的解决方法
2013/05/02 PHP
php定时执行任务设置详解
2015/02/06 PHP
PHP扩展程序实现守护进程
2015/04/16 PHP
PHP微信支付实例解析
2016/07/22 PHP
PHP lcfirst()函数定义与用法
2019/03/08 PHP
Laravel (Lumen) 解决JWT-Auth刷新token的问题
2019/10/24 PHP
极酷的javascirpt,让你随意编辑任何网页
2007/02/25 Javascript
论坛里点击别人帖子下面的回复,回复标题变成“回复 24# 的帖子”
2009/06/14 Javascript
JQuery打造PHP的AJAX表单提交实例
2009/11/03 Javascript
json数据处理技巧(字段带空格、增加字段、排序等等)
2013/06/14 Javascript
jsp网页搜索结果中实现选中一行使其高亮
2014/02/17 Javascript
JavaScript中pop()方法的使用教程
2015/06/09 Javascript
jquery实现简单手风琴菜单效果实例
2015/06/13 Javascript
js关于getImageData跨域问题的解决方法
2016/10/14 Javascript
js原生之焦点图转换加定时器实例
2016/12/12 Javascript
Bootstrap Table使用整理(四)之工具栏
2017/06/09 Javascript
js实现图片上传预览原理分析
2017/07/13 Javascript
基于vue2.0实现简单轮播图
2017/11/27 Javascript
es6数组之扩展运算符操作实例分析
2020/04/25 Javascript
2分钟实现一个Vue实时直播系统的示例代码
2020/06/05 Javascript
[01:09]模型精美,特效酷炫!TI9不朽宝藏Ⅰ鉴赏
2019/05/10 DOTA
Python简单的制作图片验证码实例
2017/05/31 Python
python多线程+代理池爬取天天基金网、股票数据过程解析
2019/08/13 Python
python Kmeans算法原理深入解析
2019/08/23 Python
Python使用urllib模块对URL网址中的中文编码与解码实例详解
2020/02/18 Python
CSS3中的弹性布局em运用入门详解 1em等于多少像素
2021/02/08 HTML / CSS
NFL欧洲商店(德国):NFL Europe Shop DE
2018/11/03 全球购物
团队口号大全
2014/06/06 职场文书
企业党员个人自我评价
2014/09/20 职场文书
领导班子对照检查材料
2014/09/22 职场文书
高考学习决心书
2015/02/04 职场文书
辞职信怎么写?你都知道吗?
2019/06/24 职场文书
2019年英语版感谢信(8篇)
2019/09/29 职场文书
Java死锁的排查
2022/05/11 Java/Android
python通过新建环境安装tfx的问题
2022/05/20 Python