非递归的输出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生成杨辉三角形的示例代码
Aug 29 Python
python2与python3中关于对NaN类型数据的判断和转换方法
Oct 30 Python
python并发和异步编程实例
Nov 15 Python
python之cv2与图像的载入、显示和保存实例
Dec 05 Python
Django 多环境配置详解
May 14 Python
pandas 层次化索引的实现方法
Jul 06 Python
django搭建项目配置环境和创建表过程详解
Jul 22 Python
python实现复制文件到指定目录
Oct 16 Python
python socket通信编程实现文件上传代码实例
Dec 14 Python
完美解决pycharm导入自己写的py文件爆红问题
Feb 12 Python
appium+python adb常用命令分享
Mar 06 Python
keras读取h5文件load_weights、load代码操作
Jun 12 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中的i++与++i的区别及效率
2016/06/15 PHP
PHP流Streams、包装器wrapper概念与用法实例详解
2017/11/17 PHP
jQuery技巧总结
2011/01/01 Javascript
javascript中的注释使用与注意事项小结
2011/09/20 Javascript
JavaScript入门之事件、cookie、定时等
2011/10/21 Javascript
JavaScript实现数字数组按照倒序排列的方法
2015/04/06 Javascript
Bootstrap3.0建站教程(一)之bootstrap表单元素排版
2016/06/01 Javascript
jquery实现简单Tab切换菜单效果
2020/07/17 Javascript
浅析Vue自定义组件的v-model
2017/11/26 Javascript
基于jquery实现九宫格拼图小游戏
2018/11/30 jQuery
BootStrap模态框闪退问题实例代码详解
2018/12/10 Javascript
elementUI select组件默认选中效果实现的方法
2019/03/25 Javascript
nestjs中异常过滤器Exceptionfilter的具体使用
2021/02/07 Javascript
[02:19]DOTA2上海特级锦标赛 观赛指南 Spectator Guide
2016/02/04 DOTA
[41:17]完美世界DOTA2联赛PWL S3 access vs CPG 第二场 12.13
2020/12/17 DOTA
Python字符遍历的艺术
2008/09/06 Python
python读写json文件的简单实现
2017/04/11 Python
Python实现一个简单的验证码程序
2017/11/03 Python
Django项目实战之用户头像上传与访问的示例
2018/04/21 Python
python多线程下信号处理程序示例
2019/05/31 Python
python3+PyQt5 使用三种不同的简便项窗口部件显示数据的方法
2019/06/17 Python
python函数的作用域及关键字详解
2019/08/20 Python
Python 内置函数globals()和locals()对比详解
2019/12/23 Python
Python 实现国产SM3加密算法的示例代码
2020/09/21 Python
python使用numpy中的size()函数实例用法详解
2021/01/29 Python
美国求婚钻戒网站:Super Jeweler
2016/08/27 全球购物
日本最大级玩偶手办购物:あみあみ Amiami
2018/04/23 全球购物
法国房车租赁网站:Yescapa
2019/08/26 全球购物
如何拷贝一整个Java对象,包括它的状态
2013/12/27 面试题
消防先进事迹材料
2014/02/10 职场文书
博士生求职信
2014/07/06 职场文书
上班离岗检讨书
2014/09/10 职场文书
学习朴航瑛老师爱岗敬业先进事迹思想汇报
2014/09/17 职场文书
财务检查整改报告
2014/11/06 职场文书
Python图片验证码降噪和8邻域降噪
2021/08/30 Python
漫画「日和酱的要求是绝对的」第3卷封面公开
2022/03/21 日漫