题目描述
给定参数 n,从 1 到 n 会有 n 个整数:1,2,3,...,n, 这 n 个数字共有 n! 种排列。
按大小顺序升序列出所有排列的情况,并一一标记,当 n = 3 时,所有排列如下:
"123"
"132"
"213"
"231"
"312"
"321"
给定 n 和 k,返回第 k 个排列。
输入描述
输入两行,第一行为 n,第二行为 k,
给定 n 的范围是[1, 9], 给定 k 的范围是[1, n!]。
输出描述
输出排在第 k 位置的数字。
用例1
输入
3
3
输出
213
说明
3的排列有123,132,213...,那么第三位置就是213
用例2
输入
2
2
输出
21
说明
2的排列有12,21,那么第二位置的为21。
python
n=int(input())
k=int(input())
nums =[i for i in range(1,n+1)]
fact = 1 #n的阶乘
for i in range(1,n+1):
fact*=i
results=[]
k-=1 #数字是从1开始的,在这里转化为索引
for i in range(n,0,-1):
fact//=i
results.append(nums.pop(k//fact))
k%=fact
print(''.join(map(str,results)))