非递归的输出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中使用AOP实现Redis缓存示例
Jul 11 Python
python使用xpath中遇到:到底是什么?
Jan 04 Python
Linux 修改Python命令的方法示例
Dec 03 Python
python简单区块链模拟详解
Jul 03 Python
python numpy 常用随机数的产生方法的实现
Aug 21 Python
python利用JMeter测试Tornado的多线程
Jan 12 Python
OpenCV+python实现实时目标检测功能
Jun 24 Python
Python collections模块的使用方法
Oct 09 Python
pycharm中leetcode插件使用图文详解
Dec 07 Python
浅析Python 中的 WSGI 接口和 WSGI 服务的运行
Dec 09 Python
史上最详细的Python打包成exe文件教程
Jan 17 Python
pytorch查看网络参数显存占用量等操作
May 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缓存类完整实例
2014/07/26 PHP
php计算一个文件大小的方法
2015/03/30 PHP
百度工程师讲PHP函数的实现原理及性能分析(一)
2015/05/13 PHP
php精确的统计在线人数的方法
2015/10/21 PHP
php单例模式的简单实现方法
2016/06/10 PHP
JavaScript中的对象序列化介绍
2014/12/30 Javascript
基于jquery实现鼠标滚轮驱动的图片切换效果
2015/10/26 Javascript
jQuery 获取跨域XML(RSS)数据的相关总结分析
2016/05/18 Javascript
AngularJS基础 ng-options 指令详解
2016/08/02 Javascript
Angular如何引入第三方库的方法详解
2017/07/13 Javascript
微信小程序模拟cookie的实现
2018/06/20 Javascript
vue不操作dom实现图片轮播的示例代码
2019/12/18 Javascript
[03:41]2018完美盛典-《Fight With Us》
2018/12/16 DOTA
Windows系统下安装Python的SSH模块教程
2015/02/05 Python
简单介绍Python的Django框架加载模版的方式
2015/07/20 Python
python访问mysql数据库的实现方法(2则示例)
2016/01/06 Python
[原创]Python入门教程3. 列表基本操作【定义、运算、常用函数】
2018/10/30 Python
matplotlib 生成的图像中无法显示中文字符的解决方法
2020/06/10 Python
详解用Python调用百度地图正/逆地理编码API
2020/07/02 Python
python基于exchange函数发送邮件过程详解
2020/11/06 Python
CSS3之transition实现下划线的示例代码
2018/05/30 HTML / CSS
加热夹克:RAVEAN
2018/10/19 全球购物
信用社实习人员自我鉴定
2013/09/20 职场文书
音乐专业自荐信
2014/02/07 职场文书
安全生产月活动总结
2014/05/04 职场文书
比赛口号大全
2014/06/10 职场文书
绿色环保标语
2014/06/12 职场文书
班级心理活动总结
2014/07/04 职场文书
园林专业毕业生自荐信
2014/07/04 职场文书
尊老爱幼演讲稿
2014/09/04 职场文书
六查六看心得体会
2014/10/14 职场文书
房产协议书范本
2014/10/18 职场文书
2014小学语文教师个人工作总结
2014/12/03 职场文书
运动会通讯稿200字
2015/07/20 职场文书
2019年度行政文员工作计划范本!
2019/07/04 职场文书
python保存大型 .mat 数据文件报错超出 IO 限制的操作
2021/05/10 Python