暴力解法:
class Solution:
def getPermutation(self, n: int, k: int) -> str:
nums = [str(i+1) for i in range(n)]
if(len(nums) == 0):
return ""
tmp = []
res = []
flag = [0] * len(nums)
def backtrace():
if (len(tmp) == len(nums)):
res.append(tmp.copy())
return
if (len(res) == k):
return
for i in range(len(nums)):
if flag[i] == 1:
continue
tmp.append(nums[i])
flag[i] = 1
backtrace()
flag[i] = 0
tmp.pop()
return
backtrace()
return "".join(res[-1])
数学:
class Solution:
def getPermutation(self, n: int, k: int) -> str:
factorial = [1]
for i in range(1, n):
factorial.append(factorial[-1] * i)
k -= 1
ans = list()
valid = [1] * (n + 1)
for i in range(1, n + 1):
order = k // factorial[n - i] + 1
for j in range(1, n + 1):
order -= valid[j]
if order == 0:
ans.append(str(j))
valid[j] = 0
break
k %= factorial[n - i]
return "".join(ans)