非递归的输出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安装以及IDE的配置教程
Apr 29 Python
Python初学时购物车程序练习实例(推荐)
Aug 08 Python
numpy使用技巧之数组过滤实例代码
Feb 03 Python
TensorFlow 合并/连接数组的方法
Jul 27 Python
Django如何实现网站注册用户邮箱验证功能
Aug 14 Python
python爬虫开发之urllib模块详细使用方法与实例全解
Mar 09 Python
pygame实现弹球游戏
Apr 14 Python
PyCharm设置Ipython交互环境和宏快捷键进行数据分析图文详解
Apr 23 Python
python脚本监控logstash进程并邮件告警实例
Apr 28 Python
浅谈python 类方法/静态方法
Sep 18 Python
基于python模拟bfs和dfs代码实例
Nov 19 Python
Django路由层如何获取正确的url
Jul 15 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技术开发技巧分享
2010/03/23 PHP
PHP zlib扩展实现页面GZIP压缩输出
2010/06/17 PHP
10条PHP高级技巧[修正版]
2011/08/02 PHP
Windows中使用计划任务自动执行PHP程序实例
2014/05/09 PHP
PHP使用stream_context_create()模拟POST/GET请求的方法
2016/04/02 PHP
关于php几种字符串连接的效率比较(详解)
2017/02/22 PHP
PHPCrawl爬虫库实现抓取酷狗歌单的方法示例
2017/12/21 PHP
php实现根据身份证获取精准年龄
2020/02/26 PHP
Javascript调试工具(下载)
2007/01/09 Javascript
很酷的javascript loading效果代码
2008/06/18 Javascript
js列举css中所有图标的实现代码
2011/07/04 Javascript
jquery滚动组件(vticker.js)实现页面动态数据的滚动效果
2013/07/03 Javascript
javascript和HTML5利用canvas构建猜牌游戏实现算法
2013/07/17 Javascript
Json和Jsonp理论实例代码详解
2013/11/15 Javascript
jquery如何扑捉回车键触发的事件
2014/04/24 Javascript
比例尺、缩略图、平移缩放之百度地图添加控件方法
2015/08/03 Javascript
基于javascript实现动态时钟效果
2020/08/18 Javascript
使用微信小程序开发前端【快速入门】
2016/12/05 Javascript
JS实现字符串转驼峰格式的方法
2016/12/16 Javascript
使用jQuery实现页面定时弹出广告效果
2017/08/24 jQuery
Vue 动态设置路由参数的案例分析
2018/04/24 Javascript
vue实现多组关键词对应高亮显示功能
2019/07/25 Javascript
关于JavaScript数组去重的一些理解汇总
2020/09/10 Javascript
[02:28]PWL开团时刻DAY3——Ink Ice与DeMonsTer之间的勾心斗角
2020/11/03 DOTA
python清除字符串里非数字字符的方法
2015/07/02 Python
python ansible服务及剧本编写
2017/12/29 Python
Python 类的特殊成员解析
2018/06/20 Python
python requests.post带head和body的实例
2019/01/02 Python
Python pandas用法最全整理
2019/08/04 Python
高清屏中使用Canvas绘图出现模糊的问题及解决方法
2019/06/03 HTML / CSS
高三高考决心书
2014/03/11 职场文书
我的小天地教学反思
2014/04/30 职场文书
2014年社区重阳节活动策划方案
2014/09/16 职场文书
新学期感想
2015/08/10 职场文书
用Python编写简单的gRPC服务的详细过程
2021/07/04 Python
vue使用refs获取嵌套组件中的值过程
2022/03/31 Vue.js