非递归的输出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写的一个文本编辑器
Jan 23 Python
Python对list列表结构中的值进行去重的方法总结
May 07 Python
Python教程之全局变量用法
Jun 27 Python
Python的消息队列包SnakeMQ使用初探
Jun 29 Python
ubuntu系统下 python链接mysql数据库的方法
Jan 09 Python
浅谈python内置变量-reversed(seq)
Jun 21 Python
Python生成数字图片代码分享
Oct 31 Python
浅谈Python对内存的使用(深浅拷贝)
Jan 17 Python
Python面向对象class类属性及子类用法分析
Feb 02 Python
python 中的列表生成式、生成器表达式、模块导入
Jun 19 Python
Python爬虫之爬取淘女郎照片示例详解
Jul 28 Python
教你怎么用Python生成九宫格照片
May 20 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生成简单的验证码
2016/06/01 PHP
浅谈PHP的exec()函数无返回值排查方法(必看)
2017/03/31 PHP
PHP实践教程之过滤、验证、转义与密码详解
2017/07/24 PHP
Laravel使用swoole实现websocket主动消息推送的方法介绍
2019/10/20 PHP
比较全面的event对像在IE与FF中的区别 推荐
2009/09/21 Javascript
javascript setAttribute, getAttribute 在不同浏览器上的不同表现
2010/08/05 Javascript
关于在IE下的一个安全BUG --可用于跟踪用户的系统鼠标位置
2013/04/17 Javascript
为什么要在引入的css或者js文件后面加参数的详细讲解
2013/05/03 Javascript
图片动画横条广告带上下滚动的JS代码
2013/10/25 Javascript
使用JavaScript脚本判断页面是否在微信中被打开
2016/03/06 Javascript
使用递归遍历对象获得value值的实现方法
2016/06/14 Javascript
Vuejs第七篇之Vuejs过渡动画案例全面解析
2016/09/05 Javascript
bootstrap 弹出框modal添加垂直方向滚轴效果
2018/07/09 Javascript
Vue 实现列表动态添加和删除的两种方法小结
2018/09/07 Javascript
node实现分片下载的示例代码
2018/10/17 Javascript
使用Phantomjs和Node完成网页的截屏快照的方法
2019/07/16 Javascript
微信小程序swiper禁止用户手动滑动代码实例
2019/08/23 Javascript
使用Python脚本操作MongoDB的教程
2015/04/16 Python
Python保存MongoDB上的文件到本地的方法
2016/03/16 Python
浅析Python编写函数装饰器
2016/03/18 Python
python正则表达式re之compile函数解析
2017/10/25 Python
numpy实现合并多维矩阵、list的扩展方法
2018/05/08 Python
python的xpath获取div标签内html内容,实现innerhtml功能的方法
2019/01/02 Python
对Python w和w+权限的区别详解
2019/01/23 Python
Django项目使用CircleCI的方法示例
2019/07/14 Python
Kears+Opencv实现简单人脸识别
2019/08/28 Python
Python发送手机动态验证码代码实例
2020/02/28 Python
写好自荐信要注意的问题
2013/11/10 职场文书
第一批党的群众路线教育实践活动总结报告
2014/07/03 职场文书
2015年教务处干事工作总结
2015/07/22 职场文书
2019 入党申请书范文
2019/07/10 职场文书
go结构体嵌套的切片数组操作
2021/04/28 Golang
如何自己动手写SQL执行引擎
2021/06/02 MySQL
python利用while求100内的整数和方式
2021/11/07 Python
《游戏王:大师决斗》将推出新卡牌包4月4日上线
2022/03/31 其他游戏