60. 第k个排列
解
例如:
输入: n = 4 k = 10
10 = 3! * 1 + 4
4 = 2! * 2 + 0
表明 第10个排列位于
2 分支下的 (余数 > 0)
第2个分支下的 (余数 == 0)
最后一个排列
即 2 3 4 1
class Solution:
def getPermutation(self, n: int, k: int) -> str:
# n个数顺序排列
l = [i + 1 for i in range(n)]
# 阶乘
f = [1, 1, 2, 6, 24, 120, 720, 5040, 40320, 362880]
order = n - 1
result = ""
while k > 0:
# 商
q = k // f[order]
# 余数
r = k % f[order]
if r:
# 余数 > 0
result += str(l[q])
del l[q]
else:
# 余数 == 0 表示位于 q 分支下的最后一个排列
result += str(l[q - 1])
del l[q - 1]
for num in l[::-1]:
result += str(num)
break
# 更新 k
k = r
# 更新 阶乘
order -= 1
return result