非递归的输出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列出一个文件夹及其子目录的所有文件
Jun 30 Python
python rsa 加密解密
Mar 20 Python
pycharm远程调试openstack的图文教程
Nov 21 Python
python3实现公众号每日定时发送日报和图片
Feb 24 Python
python在TXT文件中按照某一字符串取出该字符串所在的行方法
Dec 10 Python
详解从Django Rest Framework响应中删除空字段
Jan 11 Python
使用Python向DataFrame中指定位置添加一列或多列的方法
Jan 29 Python
Python Json数据文件操作原理解析
May 09 Python
浅谈Python程序的错误:变量未定义
Jun 02 Python
Python3爬虫中Splash的知识总结
Jul 10 Python
python tkinter的消息框模块(messagebox,simpledialog)
Nov 07 Python
Python如何识别银行卡卡号?
Jun 10 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实现的用户查询类实例
2015/06/18 PHP
PHP如何实现Unicode和Utf-8编码相互转换
2015/07/29 PHP
php伪静态验证码不显示的解决方案
2019/09/26 PHP
jQuery的链式调用浅析
2010/12/03 Javascript
使用jquery插件实现图片延迟加载技术详细说明
2011/03/12 Javascript
JS判断是否360安全浏览器极速内核的方法
2015/01/29 Javascript
bootstrap table 服务器端分页例子分享
2015/02/10 Javascript
JS实现霓虹灯文字效果的方法
2015/08/06 Javascript
深入剖析JavaScript面向对象编程
2016/07/12 Javascript
Bootstrap table两种分页示例
2016/12/23 Javascript
微信小程序公用参数与公用方法用法示例
2019/01/09 Javascript
抖音上用记事本编写爱心小程序教程
2019/04/17 Javascript
10个最受欢迎的 JavaScript框架(推荐)
2019/04/24 Javascript
vue+element实现表格新增、编辑、删除功能
2019/05/28 Javascript
解决layer弹出层自适应页面大小的问题
2019/09/16 Javascript
简单使用webpack打包文件的实现
2019/10/29 Javascript
js+h5 canvas实现图片验证码
2020/10/11 Javascript
微信小程序入门之指南针
2020/10/22 Javascript
如何在vue中使用百度地图添加自定义覆盖物(水波纹)
2020/11/03 Javascript
js基于canvas实现时钟组件
2021/02/07 Javascript
2款Python内存检测工具介绍和使用方法
2014/06/01 Python
浅谈python中scipy.misc.logsumexp函数的运用场景
2016/06/23 Python
Python实现基本数据结构中队列的操作方法示例
2017/12/04 Python
Python Numpy库datetime类型的处理详解
2019/07/13 Python
python使用 cx_Oracle 模块进行查询操作示例
2019/11/28 Python
Python将二维列表list的数据输出(TXT,Excel)
2020/04/23 Python
html5与css3小应用
2013/04/03 HTML / CSS
.NET程序员的数据库面试题
2012/10/10 面试题
教师评优的个人自我评价分享
2013/09/19 职场文书
2014年基层党组织公开承诺书
2014/03/29 职场文书
租房合同协议书
2014/04/09 职场文书
预备党员自我批评思想汇报
2014/10/10 职场文书
介绍信样本
2015/01/31 职场文书
新兵入伍决心书
2015/09/22 职场文书
护士岗前培训心得体会
2016/01/08 职场文书
解析探秘fescar分布式事务实现原理
2022/02/28 Java/Android