利用全排列解决LeetCode题库第60题排列序列问题

60. 排列序列

难度:困难

问题描述:

给出集合 [1,2,3,...,n],其所有元素共有 n! 种排列。

按大小顺序列出所有排列情况,并一一标记,当 n = 3 时, 所有排列如下:

"123"

"132"

"213"

"231"

"312"

"321"

给定 n 和 k,返回第 k 个排列。

示例 1:

输入:n = 3, k = 3

输出:"213"

示例 2:

输入:n = 4, k = 9

输出:"2314"

示例 3:

输入:n = 3, k = 1

输出:"123"

处理步骤:

  1. 利用递归生成n个数的全排列
  2. 将生成的全排列按大小顺序排序
  3. 输出排列中第k个元素

算法简单,全排列的生成又一次成为解决问题的关键

程序如下:

#输入n和k
n=int(input('pls input n='))
k=int(input('pls input k='))
words=[str(i) for i in range(1,n+1)]

#qpl()函数生成数字全排列
def qpl(words):
    if len(words)==1:
        return words
    elif len(words)==2:
        return [words[0]+words[1],words[1]+words[0]]
    else:
        a=[]
        w=qpl(words[1:])
        for j in w:
            for i in range(0,len(j)+1,len(words[0])):
                a.append(j[:i]+words[0]+j[i:])
        return a

c=qpl(words)
c.sort()
print(f'n为{n}的全排列如下:',end=' ')
l=len(c)
for i in range(l):
    if i%5==0:
        print()
        print(c[i],end='  ')        
    else: 
        print(c[i],end='  ')
print()
print(f'其中第{k}个排列为{c[k-1]}')

 

运行实例1:

pls input n=3

pls input k=3

n为3的全排列如下:

123  132  213  231  312  

321  

其中第3个排列为213

运行实例2:

pls input n=4
pls input k=5
n为4的全排列如下: 
1234  1243  1324  1342  1423  
1432  2134  2143  2314  2341  
2413  2431  3124  3142  3214  
3241  3412  3421  4123  4132  
4213  4231  4312  4321  
其中第5个排列为1423

运行实例3:

pls input n=5
pls input k=3
n为5的全排列如下: 
12345  12354  12435  12453  12534  
12543  13245  13254  13425  13452  
13524  13542  14235  14253  14325  
14352  14523  14532  15234  15243  
15324  15342  15423  15432  21345  
21354  21435  21453  21534  21543  
23145  23154  23415  23451  23514  
23541  24135  24153  24315  24351  
24513  24531  25134  25143  25314  
25341  25413  25431  31245  31254  
31425  31452  31524  31542  32145  
32154  32415  32451  32514  32541  
34125  34152  34215  34251  34512  
34521  35124  35142  35214  35241  
35412  35421  41235  41253  41325  
41352  41523  41532  42135  42153  
42315  42351  42513  42531  43125  
43152  43215  43251  43512  43521  
45123  45132  45213  45231  45312  
45321  51234  51243  51324  51342  
51423  51432  52134  52143  52314  
52341  52413  52431  53124  53142  
53214  53241  53412  53421  54123  
54132  54213  54231  54312  54321  
其中第3个排列为12435

感悟:战胜困难,前面必定一马平川!

 

  • 28
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值