Problem
Given n and k, return the k-th permutation sequence in n ! n! n!.
Algorithm
k
=
a
1
∗
(
n
−
1
)
!
+
a
2
∗
(
n
−
2
)
!
+
.
.
.
+
a
n
k = a_1 * (n-1)! + a_2 * (n-2)! + ... + a_n
k=a1∗(n−1)!+a2∗(n−2)!+...+an
a
i
a_i
ai is the number id in the left number after remove
a
1
a_1
a1 to
a
i
−
1
a_{i-1}
ai−1.
a
n
a_n
an is the last left number.
Code
class Solution:
def getPermutation(self, n: int, k: int) -> str:
visit = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
fac = [1, 0, 0, 0, 0, 0, 0, 0, 0, 0]
for i in range(1, 10):
fac[i] = fac[i-1] * i
ans = ""
k -= 1
for i in range(n-1, 0, -1):
a = k // fac[i]
k -= a * fac[i]
cnt = 0
for j in range(1, n+1):
if visit[j] == 0:
cnt += 1
if cnt == a+1:
visit[j] = 1
ans += str(j)
break
for i in range(1, n+1):
if visit[i] == 0:
ans += str(i)
break
return ans