非递归的输出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脚本分享
Apr 21 Python
PyQt5每天必学之关闭窗口
Apr 19 Python
Python处理中文标点符号大集合
May 14 Python
python opencv旋转图像(保持图像不被裁减)
Jul 26 Python
对Python3 pyc 文件的使用详解
Feb 16 Python
使用PYTHON解析Wireshark的PCAP文件方法
Jul 23 Python
django框架面向对象ORM模型继承用法实例分析
Jul 29 Python
django商品分类及商品数据建模实例详解
Jan 03 Python
在pycharm中debug 实时查看数据操作(交互式)
Jun 09 Python
Pycharm连接gitlab实现过程图解
Sep 01 Python
15个Pythonic的代码示例(值得收藏)
Oct 29 Python
python实现模拟器爬取抖音评论数据的示例代码
Jan 06 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中判断文件存在使用is_file还是file_exists?
2015/04/03 PHP
解决PHPstudy Apache无法启动的问题【亲测有效】
2020/10/30 PHP
JS BASE64编码 window.atob(), window.btoa()
2021/03/09 Javascript
在JavaScript中通过URL传递汉字的方法
2007/04/09 Javascript
通过javascript的匿名函数来分析几段简单有趣的代码
2010/06/29 Javascript
使用JavaScript获取电池状态的方法
2014/05/03 Javascript
JavaScript实现从数组中选出和等于固定值的n个数
2014/09/03 Javascript
jQuery实现宽屏图片轮播实例教程
2015/11/24 Javascript
去除字符串左右两边的空格(实现代码)
2016/05/12 Javascript
jQuery实现鼠标经过像翻页和描点链接效果
2016/08/08 Javascript
完美解决IE9浏览器出现的对象未定义问题
2016/09/29 Javascript
js文件中直接alert()中文出来的是乱码的解决方法
2016/11/01 Javascript
JavaScript的兼容性与调试技巧
2016/11/22 Javascript
在ABP框架中使用BootstrapTable组件的方法
2017/07/31 Javascript
基于Cookie常用操作以及属性介绍
2017/09/07 Javascript
vue.js实现的绑定class操作示例
2018/07/06 Javascript
React router动态加载组件之适配器模式的应用详解
2018/09/12 Javascript
微信小程序MUI导航栏透明渐变功能示例(通过改变rgba的a值实现)
2019/01/24 Javascript
Layui table field初始化加载时进行隐藏的方法
2019/09/19 Javascript
使用Node.js和Socket.IO扩展Django的实时处理功能
2015/04/20 Python
谈谈Python进行验证码识别的一些想法
2016/01/25 Python
简析Python的闭包和装饰器
2016/02/26 Python
详解Python中的动态属性和特性
2018/04/07 Python
Flask框架学习笔记之使用Flask实现表单开发详解
2019/08/12 Python
python内置函数sorted()用法深入分析
2019/10/08 Python
美国电子产品主要品牌的授权在线零售商:DataVision
2019/03/23 全球购物
ABOUT YOU匈牙利:500个最受欢迎的时尚品牌
2019/07/19 全球购物
大专学生推荐信范文
2013/11/19 职场文书
岗位职责的构建方法
2014/02/01 职场文书
最经典的大学生职业生涯规划范文
2014/03/05 职场文书
大家访活动实施方案
2014/03/10 职场文书
2014年学生会主席工作总结
2014/11/07 职场文书
小学副班长竞选稿
2015/11/21 职场文书
2016年领导干部廉政承诺书
2016/03/24 职场文书
MySQL优化常用的19种有效方法(推荐!)
2022/03/17 MySQL
一文了解MYSQL三大范式和表约束
2022/04/03 MySQL