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使用wxpython开发简单记事本的方法
May 20 Python
动感网页相册 python编写简单文件夹内图片浏览工具
Aug 17 Python
用python写一个windows下的定时关机脚本(推荐)
Mar 21 Python
python读写json文件的简单实现
Apr 11 Python
Django入门使用示例
Dec 12 Python
jupyter notebook引用from pyecharts.charts import Bar运行报错
Apr 23 Python
Python 3.6 读取并操作文件内容的实例
Apr 23 Python
Python3中lambda表达式与函数式编程讲解
Jan 14 Python
python开发游戏的前期准备
May 05 Python
python利用dlib获取人脸的68个landmark
Nov 27 Python
如何向scrapy中的spider传递参数的几种方法
Nov 18 Python
Python利用myqr库创建自己的二维码
Nov 24 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开发负载均衡指南
2010/07/17 PHP
PHP对字符串的递增运算分析
2010/08/08 PHP
解析smarty模板中类似for的功能实现
2013/06/18 PHP
解决Laravel自定义类引入和命名空间的问题
2019/10/15 PHP
JS 统计时间
2021/03/09 Javascript
Javascript 判断客户端浏览器类型代码
2010/03/01 Javascript
关于递归运算的顺序测试代码
2011/11/30 Javascript
根据经纬度计算地球上两点之间的距离js实现代码
2013/03/05 Javascript
jquery 表格的增行删行实现思路
2013/03/21 Javascript
JS下拉框内容左右移动效果的具体实现
2013/07/10 Javascript
jquery设置text的值示例(设置文本框 DIV 表单值)
2014/01/06 Javascript
jQuery - css() 方法示例详解
2014/01/16 Javascript
jQuery实现的多选框多级联动插件
2014/05/02 Javascript
如何根据百度地图计算出两地之间的驾驶距离(两种语言js和C#)
2015/10/29 Javascript
js获取鼠标点击的对象,点击另一个按钮删除该对象的实现代码
2016/05/13 Javascript
JS实现iframe自适应高度的方法(兼容IE与FireFox)
2016/06/24 Javascript
vue自定义指令实现v-tap插件
2016/11/03 Javascript
jQuery实现右侧抽屉式在线客服功能
2017/12/25 jQuery
小程序云开发部署攻略(图文教程)
2018/10/30 Javascript
vue element upload组件 file-list的动态绑定实现
2019/10/11 Javascript
ckeditor一键排版功能实现方法分析
2020/02/06 Javascript
jQuery实现异步上传一个或多个文件
2020/08/17 jQuery
nuxt.js 在middleware(中间件)中实现路由鉴权操作
2020/11/06 Javascript
js获取图片的base64编码并压缩
2020/12/05 Javascript
[01:52]2014DOTA2西雅图邀请赛 V社开大会你不知道的小秘密
2014/07/08 DOTA
[02:37]TI8勇士令状不朽珍藏II视频展示
2018/06/23 DOTA
Python break语句详解
2014/03/11 Python
python的set处理二维数组转一维数组的方法示例
2019/05/31 Python
什么是Python中的匿名函数
2020/06/02 Python
python中执行smtplib失败的处理方法
2020/07/01 Python
英国航空官网:British Airways
2016/09/11 全球购物
澳大利亚个性化儿童礼品网站:Bright Star Kids
2019/06/14 全球购物
电气自动化大学生求职信
2013/10/16 职场文书
就业自荐书
2013/12/05 职场文书
初中生评语大全
2014/04/24 职场文书
使用Postman测试需要授权的接口问题
2022/06/21 Java/Android