題目描述
給出集合 [1,2,3,…,n],其所有元素共有 n! 種排列。
按大小順序列出所有排列情況,并一一標記,當 n = 3 時, 所有排列如下:
"123"
"132"
"213"
"231"
"312"
"321"
給定 n 和 k,返回第 k 個排列。
說明:
給定 n 的范圍是 [1, 9]。
給定 k 的范圍是[1, n!]。
示例 1:
輸入: n = 3, k = 3
輸出: "213"
示例 2:
輸入: n = 4, k = 9
輸出: "2314"
思路解析
首先我們要確定首位置是什么?我們整體看一下所有數;
"123"
"132"
"213"
"231"
"312"
"321"
我們發現當首數字確定了,后面和首數字組成數字的個數相等的!
比如: 首數字為1,后面有組成兩個數123,132,可以組成2個數.當首數字為2,3同樣都是.
所有我們要找k = 3的數字 ,我們只需要 3/2 便可找到首數字什么,
下面依次類推!
其實就是一道找規律題目!
class Solution:
def getPermutation(self, n: int, k: int) -> str:
num = [str(i) for i in range(1, n+1)]
res = ""
n -= 1
while n > -1:
t = math.factorial(n)
loc = math.ceil(k / t) - 1
res += num[loc]
num.pop(loc)
k %= t
n -= 1
return res
AC60