python——全排列数的生成方式


Posted in Python onFebruary 26, 2020

【问题描述】输入整数N( 1 <= N <= 10 ),生成从1~N所有整数的全排列。

【输入形式】输入整数N。

【输出形式】输出有N!行,每行都是从1~N所有整数的一个全排列,各整数之间以空格分隔。各行上的全排列不重复。输出各行遵循"小数优先"原则, 在各全排列中,较小的数尽量靠前输出。如果将每行上的输出看成一个数字,则所有输出构成升序数列。具体格式见输出样例。

【样例输入1】1

【样例输出1】1

【样例说明1】输入整数N=1,其全排列只有一种。

【样例输入2】3

【样例输出2】

1 2 3

1 3 2

2 1 3

2 3 1

3 1 2

3 2 1

【样例说明2】输入整数N=3,要求整数1、2、3的所有全排列, 共有N!=6行。且先输出1开头的所有排列数,再输出2开头的所有排列数,最后输出3开头的所有排列数。在以1开头的所有全排列中同样遵循此原则。

【样例输入3】10

【样例输出3】

1 2 3 4 5 6 7 8 9 10

1 2 3 4 5 6 7 8 10 9

1 2 3 4 5 6 7 9 8 10

1 2 3 4 5 6 7 9 10 8

1 2 3 4 5 6 7 10 8 9

1 2 3 4 5 6 7 10 9 8

1 2 3 4 5 6 8 7 9 10

1 2 3 4 5 6 8 7 10 9

1 2 3 4 5 6 8 9 7 10

1 2 3 4 5 6 8 9 10 7

【样例说明3】输入整数N=10,要求整数1、2、3、…、10的所有全排列。上例显示了输出的前10行。

【运行时限】要求每次运行时间限制在20秒之内。超出该时间则认为程序错误。提示:当N增大时,运行时间将急剧增加。在编程时要注意尽量优化算法,提高运行效率。

q = []
def perm(n ,begin , end):#使用递归进行全排列
  global q#将q定义成全局变量
  if begin >= end:#判断是否排序到最后一个数
    q += n
  else:
    i = begin
    for num in range(begin , end):
      n[num], n[i] = n[i], n[num]
      perm(n, begin + 1, end)
      n[num], n[i] = n[i], n[num]
n = int(input())#输入整数n
a = []
for i in range(1, n+1):#获取1~n的列表
  a.append(i)
perm(a , 0 , n)
b = []
temp = 1
for w in range(1 , n+1):#获得输出行数
  temp *= w
for j in range(0 , temp):#将perm中q所得的列表进行拆分
  b.append(q[j*n:j*n+n])
ss = sorted(b)#排序
for r in ss:
  for c in r:
    print(c , end=' ')
  print()

补充拓展:解决Python数字全排列的问题

利用itertools模块

按住control点一下permulations方法,是一个枚举方法

python——全排列数的生成方式

import itertools

array = [1,2,3,4]
pailie = list(itertools.permutations(array))#要list一下,不然它只是一个对象
for x in pailie:
  for y in x:
    print(y,end=' ')
  print()

python——全排列数的生成方式

如果不是全排列,是按字典序输出不重复的组合方式可以用这个库的combinations

from itertools import combinations
import sys
a,b = map(int,input().split())# a表示组合的序列是1到几,b表示进行组合的一个是几个数
if b > a:
  print('-1')
  sys.exit()
mylist = list(range(1,a+1))
for x in combinations(mylist,b):# 参数第一个是可迭代的序列,第二个是一个组合几个数
  for index in x:
    print(index,end=' ')
  print()

输入5,3如图

python——全排列数的生成方式

以上这篇python——全排列数的生成方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python实现计算最小编辑距离
Mar 17 Python
Python构建网页爬虫原理分析
Dec 19 Python
Python快速查找list中相同部分的方法
Jun 27 Python
Python动态导入模块的方法实例分析
Jun 28 Python
python求质数的3种方法
Sep 28 Python
python 多线程重启方法
Feb 18 Python
基于django channel实现websocket的聊天室的方法示例
Apr 11 Python
Python pandas.DataFrame调整列顺序及修改index名的方法
Jun 21 Python
Python之Numpy的超实用基础详细教程
Oct 23 Python
Python有参函数使用代码实例
Jan 06 Python
python游戏开发的五个案例分享
Mar 09 Python
Python新手学习函数默认参数设置
Jun 03 Python
python GUI库图形界面开发之pyinstaller打包python程序为exe安装文件
Feb 26 #Python
python GUI库图形界面开发之PyQt5中QWebEngineView内嵌网页与Python的数据交互传参详细方法实例
Feb 26 #Python
python自动点赞功能的实现思路
Feb 26 #Python
python GUI库图形界面开发之PyQt5时间控件QTimer详细使用方法与实例
Feb 26 #Python
python GUI库图形界面开发之PyQt5窗口控件QWidget详细使用方法
Feb 26 #Python
python GUI库图形界面开发之PyQt5窗口类QMainWindow详细使用方法
Feb 26 #Python
python GUI库图形界面开发之PyQt5中QMainWindow, QWidget以及QDialog的区别和选择
Feb 26 #Python
You might like
POSIX 风格和兼容 Perl 风格两种正则表达式主要函数的类比(preg_match, preg_replace, ereg, ereg_replace)
2010/10/12 PHP
在smarty中调用php内置函数的方法
2013/02/07 PHP
phpmyadmin显示utf8_general_ci中文乱码的问题终级篇
2013/04/08 PHP
Eclipse中php插件安装及Xdebug配置的使用详解
2013/04/25 PHP
Destoon模板制作简明教程
2014/06/20 PHP
JavaScript DOM 学习第三章 内容表格
2010/02/19 Javascript
百度Popup.js弹出框进化版 拖拽小框架发布 兼容IE6/7/8,Firefox,Chrome
2010/04/13 Javascript
js和as的稳定传值问题解决
2013/07/14 Javascript
JS判断是否360安全浏览器极速内核的方法
2015/01/29 Javascript
JS实现的竖向折叠菜单代码
2015/10/21 Javascript
跟我学习javascript的函数调用和构造函数调用
2015/11/16 Javascript
javascript之Boolean类型对象
2016/06/07 Javascript
node.js express安装及示例网站搭建方法(分享)
2016/08/22 Javascript
react.js 获取真实的DOM节点实例(必看)
2017/04/17 Javascript
详谈jQuery中使用attr(), prop(), val()获取value的异同
2017/04/25 jQuery
在使用JSON格式处理数据时应该注意的问题小结
2017/05/20 Javascript
Bootstrap 模态框多次显示后台提交多次BUG的解决方法
2017/12/26 Javascript
详解JS数值Number类型
2018/02/07 Javascript
JavaScript设计模式之构造器模式(生成器模式)定义与用法实例分析
2018/07/26 Javascript
vue表单自定义校验规则介绍
2018/08/28 Javascript
vue拖拽排序插件vuedraggable使用方法详解
2020/08/21 Javascript
使用konva和vue-konva库实现拖拽滑块验证功能
2020/04/27 Javascript
微信小程序实现canvas分享朋友圈海报
2020/06/21 Javascript
纯js+css实现在线时钟
2020/08/18 Javascript
微信小程序淘宝首页双排图片布局排版代码(推荐)
2020/10/29 Javascript
Python循环语句之break与continue的用法
2015/10/14 Python
pandas分区间,算频率的实例
2019/07/04 Python
Python爬虫实现“盗取”微信好友信息的方法分析
2019/09/16 Python
Python 制作查询商品历史价格的小工具
2020/10/20 Python
CSS3中HSL和HSLA的简单使用示例
2015/07/14 HTML / CSS
医生进修自我鉴定
2014/01/19 职场文书
教师专业技术工作总结2015
2015/05/13 职场文书
国庆放假通知怎么写
2015/07/30 职场文书
Python+腾讯云服务器实现每日自动健康打卡
2021/12/06 Python
FFmpeg视频处理入门教程(新手必看)
2022/01/22 杂记
深入讲解Vue中父子组件通信与事件触发
2022/03/22 Vue.js