非递归的输出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 相关文章推荐
selenium+python实现自动化登录的方法
Sep 04 Python
Python Matplotlib库安装与基本作图示例
Jan 09 Python
在python中用print()输出多个格式化参数的方法
Jul 16 Python
详解Python利用random生成一个列表内的随机数
Aug 21 Python
python3.5 cv2 获取视频特定帧生成jpg图片
Aug 28 Python
python使用rsa非对称加密过程解析
Dec 28 Python
简单了解Python多态与属性运行原理
Jun 15 Python
python3 简单实现组合设计模式
Jul 02 Python
Python基于traceback模块获取异常信息
Jul 23 Python
用python对excel查重
Dec 07 Python
python实现web邮箱扫描的示例(附源码)
Mar 30 Python
Python中的套接字编程是什么?
Jun 21 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语法(2)
2006/10/09 PHP
PHP中实现汉字转区位码应用源码实例解析
2010/06/14 PHP
php验证手机号码(支持归属地查询及编码为UTF8)
2013/02/01 PHP
解析PHP中$_FILES的使用以及注意事项
2013/07/05 PHP
php魔术函数__call()用法实例分析
2015/02/13 PHP
[原创]PHP正则删除html代码中a标签并保留标签内容的方法
2017/05/23 PHP
浅谈js的setInterval事件
2014/12/05 Javascript
jquery实现仿JqueryUi可拖动的DIV实例
2015/07/31 Javascript
JS实现可自定义大小,可双击关闭的弹出层效果
2015/10/16 Javascript
JS添加删除DIV的简单实例
2016/07/08 Javascript
jquery html5 视频播放控制代码
2016/11/06 Javascript
javascript内存分配原理实例分析
2017/04/10 Javascript
BootStrap selectpicker后台动态绑定数据的方法
2017/07/28 Javascript
使用jquery的jsonp如何发起跨域请求及其原理详解
2017/08/17 jQuery
vue引用js文件的多种方式(推荐)
2018/05/17 Javascript
jQuery实现的点击按钮改变样式功能示例
2018/07/21 jQuery
Javascript中parseInt的正确使用方式
2018/10/17 Javascript
JS实现百度搜索框
2021/02/25 Javascript
[02:27]DOTA2英雄基础教程 莱恩
2014/01/17 DOTA
Python+selenium实现截图图片并保存截取的图片
2018/01/05 Python
Django中间件实现拦截器的方法
2018/06/01 Python
Python中.join()和os.path.join()两个函数的用法详解
2018/06/11 Python
对python中数组的del,remove,pop区别详解
2018/11/07 Python
windows下numpy下载与安装图文教程
2019/04/02 Python
对python中的os.getpid()和os.fork()函数详解
2019/08/08 Python
树莓派极简安装OpenCv的方法步骤
2019/10/10 Python
使用python制作游戏下载进度条的代码(程序说明见注释)
2019/10/24 Python
在python中计算ssim的方法(与Matlab结果一致)
2019/12/19 Python
Django Channel实时推送与聊天的示例代码
2020/04/30 Python
python模拟点击玩游戏的实例讲解
2020/11/26 Python
如何用Python编写一个电子考勤系统
2021/02/08 Python
Foot Locker德国官方网站:美国运动服和鞋类零售商
2018/11/01 全球购物
优质飞蝇钓和渔具:RiverBum
2020/05/10 全球购物
生物制药毕业生自荐信
2013/10/16 职场文书
匿名检举信范文
2015/03/02 职场文书
Redis入门教程详解
2021/08/30 Redis