非递归的输出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实现倒计时的示例
Feb 14 Python
python使用pymysql实现操作mysql
Sep 13 Python
python命令行解析之parse_known_args()函数和parse_args()使用区别介绍
Jan 24 Python
Python实现定时备份mysql数据库并把备份数据库邮件发送
Mar 08 Python
详解Django+Uwsgi+Nginx 实现生产环境部署
Nov 06 Python
python 求1-100之间的奇数或者偶数之和的实例
Jun 11 Python
pygame库实现移动底座弹球小游戏
Apr 14 Python
布隆过滤器的概述及Python实现方法
Dec 08 Python
Anaconda3+tensorflow2.0.0+PyCharm安装与环境搭建(图文)
Feb 18 Python
python爬取网易云音乐热歌榜实例代码
Aug 07 Python
如何从csv文件构建Tensorflow的数据集
Sep 21 Python
总结Python使用过程中的bug
Jun 18 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
图象函数中的中文显示
2006/10/09 PHP
一漂亮的PHP图片验证码实例
2014/03/21 PHP
PHP register_shutdown_function()函数的使用示例
2015/06/23 PHP
jquery 回车事件实现代码
2011/08/23 Javascript
浅析jQuery1.8的几个小变化
2013/12/10 Javascript
js中数组排序sort方法的原理分析
2014/11/20 Javascript
使用JavaScript获取地址栏参数的方法
2014/12/19 Javascript
jQuery实现精美的多级下拉菜单特效
2015/03/14 Javascript
IE10中flexigrid无法显示数据的解决方法
2015/07/26 Javascript
微信小程序 自己制作小组件实例详解
2016/12/22 Javascript
JS实现图片高斯模糊切换效果的焦点图实例
2017/01/21 Javascript
JS实现的文件拖拽上传功能示例
2018/05/21 Javascript
JS栈stack类的实现与使用方法示例
2019/01/31 Javascript
webpack + vue 打包生成公共配置文件(域名) 方便动态修改
2019/08/29 Javascript
Node.js操作MongoDB数据库实例分析
2020/01/19 Javascript
Python translator使用实例
2008/09/06 Python
TensorFlow安装及jupyter notebook配置方法
2017/09/08 Python
Python实现查看系统启动项功能示例
2018/05/10 Python
python K近邻算法的kd树实现
2018/09/06 Python
selenium WebDriverWait类等待机制的实现
2020/03/18 Python
Python3自定义http/https请求拦截mitmproxy脚本实例
2020/05/11 Python
完美解决ARIMA模型中plot_acf画不出图的问题
2020/06/04 Python
python操作toml文件的示例代码
2020/11/27 Python
matplotlib相关系统目录获取方式小结
2021/02/03 Python
纽约著名的服装辅料来源:M&J Trimming
2017/07/26 全球购物
红色连衣裙精品店:Red Dress Boutique
2018/08/11 全球购物
事业单位个人应聘自荐信
2013/09/21 职场文书
文史专业毕业生自荐信
2013/11/17 职场文书
农救科工作职责
2013/11/27 职场文书
大学军训感言
2014/01/10 职场文书
电子商务求职信
2014/06/15 职场文书
党员四风问题个人对照检查材料
2014/10/26 职场文书
2015年初三班主任工作总结
2015/05/21 职场文书
工作年限证明范本
2015/06/15 职场文书
观后感的写法
2015/06/19 职场文书
Python Django ORM连表正反操作技巧
2021/06/13 Python