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爬虫功能
Dec 31 Python
Python实现基本数据结构中栈的操作示例
Dec 04 Python
Python将多个excel表格合并为一个表格
Feb 22 Python
python爬取网页转换为PDF文件
Jun 07 Python
详解Python中的分组函数groupby和itertools)
Jul 11 Python
Django管理员账号和密码忘记的完美解决方法
Dec 06 Python
PyQt5的安装配置过程,将ui文件转为py文件后显示窗口的实例
Jun 19 Python
Python绘制堆叠柱状图的实例
Jul 09 Python
Python如何使用Gitlab API实现批量的合并分支
Nov 27 Python
Python-jenkins模块之folder相关操作介绍
May 12 Python
Python如何实现自带HTTP文件传输服务
Jul 08 Python
matplotlib教程——强大的python作图工具库
Oct 15 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 OPP机制和模式简介(抽象类、接口和契约式编程)
2014/06/09 PHP
PHP实现的操作数组类库定义与用法示例
2019/05/24 PHP
设定php简写功能的方法
2019/11/28 PHP
PhpSpreadsheet设置单元格常用操作汇总
2020/11/13 PHP
用js计算页面执行时间的函数
2006/12/07 Javascript
Extjs4 GridPanel 的几种样式使用介绍
2013/04/18 Javascript
javascript中的事件代理初探
2014/03/08 Javascript
ECMAScript6的新特性箭头函数(Arrow Function)详细介绍
2014/06/07 Javascript
JavaScript及jquey实现多个数组的合并操作
2014/09/06 Javascript
jQuery中大家不太了解的几个方法
2015/03/04 Javascript
轻松学习jQuery插件EasyUI EasyUI实现树形网络基本操作(2)
2015/11/30 Javascript
Vue框架中正确引入JS库的方法介绍
2017/07/30 Javascript
使用axios实现上传图片进度条功能
2017/12/21 Javascript
php 解压zip压缩包内容到指定目录的实例
2018/01/23 Javascript
vue + vuex todolist的实现示例代码
2018/03/09 Javascript
JS实现遍历不规则多维数组的方法
2018/03/21 Javascript
Vue表单demo v-model双向绑定问题
2018/06/29 Javascript
vuejs中监听窗口关闭和窗口刷新事件的方法
2018/09/21 Javascript
深入webpack打包原理及loader和plugin的实现
2020/05/06 Javascript
JavaScript 面向对象程序设计详解【类的创建、实例对象、构造函数、原型等】
2020/05/12 Javascript
Electron整合React使用搭建开发环境的步骤详解
2020/06/07 Javascript
python文件名和文件路径操作实例
2017/09/29 Python
python清除函数占用的内存方法
2018/06/25 Python
python实现将json多行数据传入到mysql中使用
2019/12/31 Python
HTML5实现自带进度条和滑块滑杆效果
2018/04/17 HTML / CSS
时尚孕妇装:HATCH Collection
2019/09/24 全球购物
会计大学生职业生涯规划书范文
2014/01/13 职场文书
商学院大学生求职的自我评价
2014/03/12 职场文书
服务宗旨标语
2014/07/01 职场文书
2014酒店客房部工作总结
2014/12/16 职场文书
2015年暑假工作总结
2015/07/13 职场文书
送给客户微信问候语!
2019/07/04 职场文书
使用numpy nonzero 找出非0元素
2021/05/14 Python
原型和原型链 prototype和proto的区别详情
2021/11/02 Javascript
JavaScript中reduce()的用法
2022/05/11 Javascript
Win11使用CAD卡顿或者致命错误怎么办?Win11无法正常使用CAD的解决方法
2022/07/23 数码科技