0060. 第 k 个排列
最后更新于
这有帮助吗?
这有帮助吗?
import math
class Solution:
def getPermutation(self, n: int, k: int) -> str:
res = ""
candidates = [str(i) for i in range(1, n + 1)]
while n != 0:
facto = math.factorial(n - 1)
# i 表示前面被我们排除的组数,也就是k所在的组的下标
# k // facto 是不行的, 比如在 k % facto == 0的情况下就会有问题
i = math.ceil(k / facto) - 1
# 我们把candidates[i]加入到结果集,然后将其弹出candidates(不能重复使用元素)
res += candidates[i]
candidates.pop(i)
# k 缩小了 facto * i
k -= facto * i
# 每次迭代我们实际上就处理了一个元素,n 减去 1,当n == 0 说明全部处理完成,我们退出循环
n -= 1
return res