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脚本
Apr 05 Python
python爬虫教程之爬取百度贴吧并下载的示例
Mar 07 Python
带你了解python装饰器
Jun 15 Python
Python实现的矩阵类实例
Aug 22 Python
python存储16bit和32bit图像的实例
Dec 05 Python
只需7行Python代码玩转微信自动聊天
Jan 27 Python
Python3.4学习笔记之常用操作符,条件分支和循环用法示例
Mar 01 Python
django-rest-framework解析请求参数过程详解
Jul 18 Python
在Django中实现添加user到group并查看
Nov 18 Python
使用python实现微信小程序自动签到功能
Apr 27 Python
深入了解Python 变量作用域
Jul 24 Python
pycharm + django跨域无提示的解决方法
Dec 06 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 执行系统命令的方法
2009/07/07 PHP
PHP+ajaxfileupload+jcrop插件完美实现头像上传剪裁
2014/06/09 PHP
PHP调试函数和日志记录函数分享
2015/01/31 PHP
php+html5实现无刷新图片上传教程
2016/01/22 PHP
PHP下使用mysqli的函数连接mysql出现warning: mysqli::real_connect(): (hy000/1040): ...
2016/02/14 PHP
phpStudy vscode 搭建debug调试的教程详解
2020/07/28 PHP
jQuery 源代码显示控件 (Ajax加载方式).
2009/05/18 Javascript
html a标签-超链接中confirm方法使用介绍
2013/01/04 Javascript
JavaScript 里的类数组对象
2015/04/08 Javascript
jQuery的animate函数实现图文切换动画效果
2015/05/03 Javascript
jQuery实现的多屏图像图层切换效果实例
2015/05/07 Javascript
原生JS实现轮播效果+学前端的感受(防止走火入魔)
2016/08/21 Javascript
BootStrap+Angularjs+NgDialog实现模式对话框
2016/08/24 Javascript
原生JS实现的放大镜效果实例代码
2016/10/15 Javascript
JavaScript数据结构之二叉查找树的定义与表示方法
2017/04/12 Javascript
es6+angular1.X+webpack 实现按路由功能打包项目的示例
2017/08/16 Javascript
Angular2+如何去除url中的#号详解
2017/12/20 Javascript
vue-cli3.0 特性解读
2018/04/22 Javascript
JS实现滑动插件
2020/01/15 Javascript
JavaScript React如何修改默认端口号方法详解
2020/07/28 Javascript
python常见的格式化输出小结
2016/12/15 Python
JPype实现在python中调用JAVA的实例
2017/07/19 Python
python3.6实现学生信息管理系统
2019/02/21 Python
Django打印出在数据库中执行的语句问题
2019/07/25 Python
使用Keras实现Tensor的相乘和相加代码
2020/06/18 Python
python 实现网易邮箱邮件阅读和删除的辅助小脚本
2021/03/01 Python
德国汽车零件和汽车配件网上商店:kfzteile24
2018/11/14 全球购物
定义一结构体变量,用其表示点坐标,并输入两点坐标,求两点之间的距离
2015/08/17 面试题
Structs界面控制层技术
2013/10/11 面试题
初一地理教学反思
2014/01/16 职场文书
机修工工作职责
2014/02/21 职场文书
2014年行政人事工作总结
2014/12/09 职场文书
文员岗位职责
2015/02/04 职场文书
2019年中学生的思想品德评语集锦
2019/12/19 职场文书
分析SQL窗口函数之取值窗口函数
2022/04/21 Oracle
java实现面板之间切换功能
2022/06/10 Java/Android