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脚本将文字转换为图片的实例分享
Aug 29 Python
浅析Python中signal包的使用
Nov 13 Python
Python列表list内建函数用法实例分析【insert、remove、index、pop等】
Jul 24 Python
Scrapy基于selenium结合爬取淘宝的实例讲解
Jun 13 Python
python 实现目录复制的三种小结
Dec 04 Python
pytorch如何冻结某层参数的实现
Jan 10 Python
Python中常用的高阶函数实例详解
Feb 21 Python
pandas分组聚合详解
Apr 10 Python
将pymysql获取到的数据类型是tuple转化为pandas方式
May 15 Python
Python读取JSON数据操作实例解析
May 18 Python
基于python实现破解滑动验证码过程解析
May 28 Python
Python OpenCV超详细讲解调整大小与图像操作的实现
Apr 02 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
利用php+mysql来做一个功能强大的在线计算器
2010/10/12 PHP
thinkphp微信开发(消息加密解密)
2015/12/02 PHP
详谈PHP中的密码安全性Password Hashing
2017/02/04 PHP
PHP实现求两个字符串最长公共子串的方法示例
2017/11/17 PHP
js 操作符实例代码
2009/10/24 Javascript
JS打印gridview实现原理及代码
2013/02/05 Javascript
js验证是否为数字的总结
2013/04/14 Javascript
jQuery中:lt选择器用法实例
2014/12/29 Javascript
Jquery Easyui验证组件ValidateBox使用详解(20)
2016/12/18 Javascript
原生js实现可拖动的登录框效果
2017/01/21 Javascript
Javascript中数组去重与拍平的方法示例
2017/02/03 Javascript
Vue指令的钩子函数使用方法
2017/03/20 Javascript
JS正则获取HTML元素的方法
2017/03/31 Javascript
使用jQuery实现鼠标点击左右按钮滑动切换
2017/08/04 jQuery
React教程之Props验证的具体用法(Props Validation)
2017/09/04 Javascript
node.js+express+mySQL+ejs+bootstrop实现网站登录注册功能
2018/01/12 Javascript
angularjs 页面自适应高度的方法
2018/01/17 Javascript
原生js实现trigger方法示例代码
2019/05/22 Javascript
JS document对象简单用法完整示例
2020/01/14 Javascript
Python查找相似单词的方法
2015/03/05 Python
Python ldap实现登录实例代码
2016/09/30 Python
快速实现基于Python的微信聊天机器人示例代码
2017/03/03 Python
使用python生成目录树
2018/03/29 Python
Pandas —— resample()重采样和asfreq()频度转换方式
2020/02/26 Python
详解使用scrapy进行模拟登陆三种方式
2021/02/21 Python
Sunglasses Shop荷兰站:英国最大的太阳镜独立在线零售商和供应商
2017/01/08 全球购物
智能旅行箱:Horizn Studios
2018/04/30 全球购物
荷兰领先的百货商店:De Bijenkorf
2018/10/17 全球购物
MediaMarkt比利时:欧洲最大电器连锁店
2020/12/21 全球购物
上课迟到检讨书100字
2014/01/11 职场文书
80后职场人的职业生涯规划
2014/03/08 职场文书
幼儿园家长评语大全
2014/04/16 职场文书
2014和解协议书范文
2014/09/15 职场文书
2015教师节师德演讲稿
2015/03/19 职场文书
2015年教导处教学工作总结
2015/07/22 职场文书
《花钟》教学反思
2016/02/17 职场文书