非递归的输出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的Twisted框架中reactor事件管理器的用法
May 25 Python
Python实现的购物车功能示例
Feb 11 Python
python email smtplib模块发送邮件代码实例
Apr 26 Python
Win10下python 2.7.13 安装配置方法图文教程
Sep 18 Python
Python docx库用法示例分析
Feb 16 Python
Python中捕获键盘的方式详解
Mar 28 Python
python3 深浅copy对比详解
Aug 12 Python
python数值基础知识浅析
Nov 19 Python
python用TensorFlow做图像识别的实现
Apr 21 Python
解决运行django程序出错问题 'str'object has no attribute'_meta'
Jul 15 Python
python中str内置函数用法总结
Dec 27 Python
Python使用pandas导入csv文件内容的示例代码
Dec 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
php在多维数组中根据键名快速查询其父键以及父键值的代码
2011/05/07 PHP
php实现两表合并成新表并且有序排列的方法
2014/12/05 PHP
PHP中imagick函数的中文解释
2015/01/21 PHP
Yii2框架类自动加载机制实例分析
2018/05/02 PHP
PHP预定义接口――Iterator用法示例
2020/06/05 PHP
javascript动画对象支持加速、减速、缓入、缓出的实现代码
2012/09/30 Javascript
window.onresize 多次触发的解决方法
2013/11/08 Javascript
jQuery简单tab切换效果实现方法
2015/04/08 Javascript
jQuery实现可高亮显示的二级CSS菜单效果
2015/09/01 Javascript
jquery仿苹果的时间/日期选择效果
2017/03/08 Javascript
纯html+css+javascript实现楼层跳跃式的页面布局(实例代码)
2017/10/25 Javascript
JavaScript生成简单等差数列
2017/11/28 Javascript
vue实现登录后页面跳转到之前页面
2018/01/07 Javascript
vue.js 实现点击展开收起动画效果
2018/07/07 Javascript
vue引入axios同源跨域问题
2018/09/27 Javascript
vue过滤器用法实例分析
2019/03/15 Javascript
Node.js API详解之 dgram模块用法实例分析
2020/06/05 Javascript
在vue中使用Base64转码的案例
2020/08/07 Javascript
微信小程序学习之自定义滚动弹窗
2020/12/20 Javascript
[00:31]DOTA2上海特级锦标赛 Fnatic战队宣传片
2016/03/04 DOTA
使用Python来编写HTTP服务器的超级指南
2016/02/18 Python
python使用正则表达式的search()函数实现指定位置搜索功能
2017/11/10 Python
JS设计模式之责任链模式实例详解
2018/02/03 Python
使用python采集脚本之家电子书资源并自动下载到本地的实例脚本
2018/10/23 Python
Django model反向关联名称的方法
2018/12/15 Python
python selenium xpath定位操作
2020/09/01 Python
德国综合购物网站:OTTO
2018/11/13 全球购物
linux面试题参考答案(5)
2014/09/01 面试题
我的动漫时代的创业计划书范文
2014/01/27 职场文书
大学信息公开实施方案
2014/03/09 职场文书
中学生期中自我鉴定
2014/04/20 职场文书
学校节能减排倡议书
2014/05/16 职场文书
新兵入伍心得体会
2014/09/04 职场文书
2014年转正工作总结
2014/11/08 职场文书
2016年优秀团员事迹材料
2016/02/25 职场文书
python使用openpyxl库读写Excel表格的方法(增删改查操作)
2021/05/02 Python