非递归的输出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 05 Python
Python ORM框架SQLAlchemy学习笔记之数据查询实例
Jun 10 Python
Python随机生成数据后插入到PostgreSQL
Jul 28 Python
Python使用xlwt模块操作Excel的方法详解
Mar 27 Python
python学习笔记--将python源文件打包成exe文件(pyinstaller)
May 26 Python
python flask安装和命令详解
Apr 02 Python
python自动化测试之DDT数据驱动的实现代码
Jul 23 Python
Python字典推导式将cookie字符串转化为字典解析
Aug 10 Python
Python3变量与基本数据类型用法实例分析
Feb 14 Python
MAC平台基于Python Appium环境搭建过程图解
Aug 13 Python
Pandas中DataFrame交换列顺序的方法实现
Dec 14 Python
pycharm配置QtDesigner的超详细方法
Jan 25 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/08/06 PHP
PHP匿名函数和use子句用法实例
2016/03/16 PHP
header与缓冲区之间的深层次分析
2016/07/30 PHP
为javascript添加String.Format方法
2020/08/11 Javascript
深入理解JavaScript系列(12) 变量对象(Variable Object)
2012/01/16 Javascript
JS获取月的最后一天与JS得到一个月份最大天数的实例代码
2013/12/16 Javascript
JavaScript严格模式禁用With语句的原因
2014/10/20 Javascript
JQuery使用$.ajax和checkbox实现下次不在通知功能
2015/04/16 Javascript
js获取鼠标位置实例详解
2015/12/09 Javascript
jQuery+CSS3+Html5实现弹出层效果实例代码(附源码下载)
2016/05/16 Javascript
JS实现控制文本框的内容
2016/07/10 Javascript
关于JavaScript数组你所不知道的3件事
2016/08/24 Javascript
谈谈jQuery之Deferred源码剖析
2016/12/19 Javascript
jQuery插件jqGrid动态获取列和列字段的方法
2017/03/03 Javascript
js实现轮播图的两种方式(构造函数、面向对象)
2017/09/30 Javascript
vue-image-crop基于Vue的移动端图片裁剪组件示例
2018/08/28 Javascript
JS模拟浏览器实现全局搜索功能
2019/09/11 Javascript
Python线程的两种编程方式
2015/04/14 Python
django自带的server 让外网主机访问方法
2018/05/14 Python
python调用百度语音识别api
2018/08/30 Python
python使用参数对嵌套字典进行取值的方法
2019/04/26 Python
对django2.0 关联表的必填on_delete参数的含义解析
2019/08/09 Python
浅谈python中频繁的print到底能浪费多长时间
2020/02/21 Python
使用 prometheus python 库编写自定义指标的方法(完整代码)
2020/06/29 Python
python help函数实例用法
2020/12/06 Python
moosejaw旗下的户外商品促销网站:Mountain Steals
2017/02/27 全球购物
爱淘宝:淘宝网购物分享平台
2017/04/28 全球购物
Eton丹麦官网:精美的男式衬衫
2020/05/27 全球购物
杭州-DOTNET笔试题集
2013/09/25 面试题
个人先进事迹材料
2014/12/29 职场文书
中标通知书格式
2015/04/17 职场文书
医院消毒隔离制度
2015/08/05 职场文书
2016年清明节寄语
2015/12/04 职场文书
党员理论学习心得体会
2016/01/21 职场文书
2016年“节能宣传周”活动总结
2016/04/05 职场文书
宪法宣传标语100条
2019/10/15 职场文书