非递归的输出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统计cpu利用率的方法
Jun 02 Python
python高手之路python处理excel文件(方法汇总)
Jan 07 Python
python获取酷狗音乐top500的下载地址 MP3格式
Apr 17 Python
Python批处理删除和重命名文件夹的实例
Jul 11 Python
python opencv实现旋转矩形框裁减功能
Jul 25 Python
python中比较两个列表的实例方法
Jul 04 Python
Django实现文件上传下载
Oct 06 Python
python自动结束mysql慢查询会话的实例代码
Oct 27 Python
使用Python进行防病毒免杀解析
Dec 13 Python
使用python将微信image下.dat文件解密为.png的方法
Nov 30 Python
详解Python openpyxl库的基本应用
Feb 26 Python
能让Python提速超40倍的神器Cython详解
Jun 24 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
Terran兵种介绍
2020/03/14 星际争霸
让PHP显示Facebook的粉丝数量方法
2014/01/08 PHP
基于PHP实现假装商品限时抢购繁忙的效果
2015/10/16 PHP
thinkphp Apache配置重启Apache1 restart 出错解决办法
2017/02/15 PHP
PHP标准库(PHP SPL)详解
2019/03/16 PHP
laravel 配置路由 api和web定义的路由的区别详解
2019/09/03 PHP
利用javascript实现禁用网页上所有文本框,下拉菜单,多行文本域
2013/12/14 Javascript
c#程序员对TypeScript的认识过程
2015/06/19 Javascript
JQuery datepicker 用法详解
2015/12/25 Javascript
iscroll碰到Select无法选择下拉刷新的解决办法
2016/05/21 Javascript
jQuery实现动态显示select下拉列表数据的方法
2018/02/05 jQuery
详解vue表单——小白速看
2018/04/08 Javascript
JavaScript中判断为整数的多种方式及保留两位小数的方法
2019/09/09 Javascript
React Native中ScrollView组件轮播图与ListView渲染列表组件用法实例分析
2020/01/06 Javascript
解决vue 给window添加和移除resize事件遇到的坑
2020/07/21 Javascript
[05:05]第三天的dota2
2013/07/29 DOTA
python with statement 进行文件操作指南
2014/08/22 Python
20招让你的Python飞起来!
2016/09/27 Python
Python实现读取Properties配置文件的方法
2018/03/29 Python
解决Python3中的中文字符编码的问题
2018/07/18 Python
Django logging配置及使用详解
2019/07/23 Python
Python+Pyqt实现简单GUI电子时钟
2021/02/22 Python
Python tkinter和exe打包的方法
2020/02/05 Python
OpenCV 使用imread()函数读取图片的六种正确姿势
2020/07/09 Python
python3 中时间戳、时间、日期的转换和加减操作
2020/07/14 Python
Python排序函数的使用方法详解
2020/12/11 Python
美国最好的葡萄酒网上商店:Wine Library
2019/11/02 全球购物
建筑装饰学院室内设计专业个人自我评价
2013/12/07 职场文书
个人求职信范文分享
2014/01/06 职场文书
护士毕业生自我鉴定
2014/02/08 职场文书
对教师的评语
2014/04/28 职场文书
商业用房租赁协议书
2014/10/13 职场文书
2014矛盾纠纷排查调处工作总结
2014/12/09 职场文书
2014年保险业务员工作总结
2014/12/23 职场文书
飞越疯人院观后感
2015/06/09 职场文书
springboot应用服务启动事件的监听实现
2022/04/06 Java/Android