非递归的输出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获取beautifulphoto随机某图片代码实例
Dec 18 Python
举例讲解Python中的Null模式与桥接模式编程
Feb 02 Python
使用python生成目录树
Mar 29 Python
python利用requests库模拟post请求时json的使用教程
Dec 07 Python
python 实现selenium断言和验证的方法
Feb 13 Python
如何基于Python批量下载音乐
Nov 11 Python
对Tensorflow中Device实例的生成和管理详解
Feb 04 Python
有趣的Python图片制作之如何用QQ好友头像拼接出里昂
Apr 22 Python
Python基于numpy模块实现回归预测
May 14 Python
Python实现查找数据库最接近的数据
Jun 08 Python
python制作图形界面的2048游戏, 基于tkinter
Apr 06 Python
Pycharm连接远程服务器并远程调试的全过程
Jun 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 array_flip() 删除重复数组元素专用函数
2010/05/16 PHP
php格式化日期和时间格式化示例分享
2014/02/24 PHP
thinkPHP5分页功能实现方法分析
2017/10/25 PHP
JavaScript Date对象使用总结
2009/05/14 Javascript
JS的反射问题
2010/04/07 Javascript
JQuery 文本框使用小结
2010/05/22 Javascript
javascript中运用闭包和自执行函数解决大量的全局变量问题
2010/12/30 Javascript
js函数获取html中className所在的内容并去除标签
2013/09/08 Javascript
JS两种定义方式的区别、内部原理
2013/11/21 Javascript
JQuery选择器、过滤器大整理
2015/05/26 Javascript
javaScript中slice函数用法实例分析
2015/06/08 Javascript
vue scroller返回页面记住滚动位置的实例代码
2018/01/29 Javascript
web页面和微信小程序页面实现瀑布流效果
2018/09/26 Javascript
详解Angular5/Angular6项目如何添加热更新(HMR)功能
2018/10/10 Javascript
Vue动态创建注册component的实例代码
2019/06/14 Javascript
vue3 源码解读之 time slicing的使用方法
2019/10/31 Javascript
微信小程序wx.request的简单封装
2019/11/13 Javascript
[51:07]VGJ.S vs Pain 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
Python的for和break循环结构中使用else语句的技巧
2016/05/24 Python
Python各类图像库的图片读写方式总结(推荐)
2018/02/23 Python
解决django前后端分离csrf验证的问题
2019/02/03 Python
Python学习笔记之While循环用法分析
2019/08/14 Python
django 做 migrate 时 表已存在的处理方法
2019/08/31 Python
python中adb有什么功能
2020/06/07 Python
python实现简单的井字棋游戏(gui界面)
2021/01/22 Python
Python datetime模块的使用示例
2021/02/02 Python
CSS3 text-shadow实现文字阴影效果
2016/02/24 HTML / CSS
杠杆的科学教学反思
2014/01/10 职场文书
地球一小时宣传标语
2014/06/24 职场文书
理财计划书
2014/08/14 职场文书
党委干部批评与自我批评发言稿
2014/09/28 职场文书
领导干部整治奢华浪费之风思想汇报
2014/10/07 职场文书
晚会主持人开场白台词
2015/05/28 职场文书
孝女彩金观后感
2015/06/10 职场文书
奖学金申请书(范文)
2019/08/14 职场文书
Go语言基础切片的创建及初始化示例详解
2021/11/17 Golang