思路:
对于长度为n的数字字符串,第k位之后的排列可能有(n-k)!(第一位之后的排列有(n-1)!),所以当如果k-1>(n-1)!,则第一位就不能是1,为(k-1)//(n-1)!,k再变为(k-1)%(n-1)!+1,再判断第二位为(k-1)//(n-2)!,k再变为(k-1)%(n-1)!+1,以此类推来判断每一位的数字,
使用k-1是因为减了1才可以正常的迭代,比如n为2,k为2,如果使用k//(n-1)!就会出错
from math import factorial
class Solution:
def getPermutation(self, n: int, k: int) -> str:
res = ''
point = n - 1
arrange = [i for i in range(1, n + 1)]
while k > 1:
var = arrange[(k - 1)//factorial(point)]
# print(var)
res += str(var)
arrange.remove(var)
k = (k - 1) % factorial(point) + 1
point -= 1
while arrange:
res += str(arrange[0])
arrange.remove(arrange[0])
return res