給出集合 [1,2,3,…,n]称勋,其所有元素共有 n! 種排列。
按大小順序列出所有排列情況,并一一標(biāo)記稀拐,當(dāng) n = 3 時(shí), 所有排列如下:
"123"
"132"
"213"
"231"
"312"
"321"
給定 n 和 k,返回第 k 個(gè)排列丹弱。
range(1, n+1)的列表德撬,以任意一個(gè)為起點(diǎn)的排列數(shù)為(n-1)!,所以先看起點(diǎn)是第幾個(gè)數(shù)字躲胳,然后更新K蜓洪,從原始列表中刪除起點(diǎn)數(shù)字,迭代計(jì)算
class Solution:
def getPermutation(self, n: int, k: int) -> str:
factory = [1]
nums = ['1']
for i in range(1, n):
factory.append(factory[i-1]*i)
nums.append(str(i+1))
k -= 1
res = []
for i in range(n-1, -1, -1):
idx = k // factory[i]
k = k % factory[i]
res.append(nums[idx])
del nums[idx]
return ''.join(res)