60. Permutation Sequence
1234,k=12
一共有total=4 * 3 * 2 * 1种情况
其中第一位是1的有3 * 2 * 1种
其中第一位是2的有3 * 2 * 1种
(12 - 1) / 3! = 1余5,第一位是2
(6 - 1 ) / 2! = 2余1,第二位是4
(2 - 1) / 1! = 1余0,第三位是3
代码如下:
class Solution(object):
def getPermutation(self, n, k):
"""
:type n: int
:type k: int
:rtype: str
"""
total = 1
mp = [False for i in range(n)]
for i in range(1, n+1):
total *= i
return self.DFS(n, k, total, mp)
def DFS(self, n, k, total, mp):
if n == 0:
return ''
total /= n
next_k = (k - 1) % total + 1
count = (k - 1) / total + 1
i = 0
while count > 0: #不能用循环,因为n已经不是原来的n,后面的循环不到
if mp[i] == False:
count -= 1
i += 1
i -= 1 #记住要减
mp[i] = True
return str(i+1) + self.DFS(n-1, next_k, total, mp)