leetcode 60 第k個排列

2021-10-24 08:30:36 字數 1619 閱讀 5522

目錄

一、題目內容

二、解題思路

三、**

給出集合 [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"

1.從高位到低位依次進行確定。

2.每次迴圈得到低一位的階乘,然後用k除以這個低一位的階乘得到高位,然後k-高位*低一位的階乘得到低一位的k,如此迴圈。

3.每找到乙個高位則將其加入到res中,同時candidate裡要刪除掉這個被選的高位。

import math

class solution:

def getpermutation(self, n: int, k: int) -> str:

ans = ''

def jiecheng(n):

if n <= 1:

return 1

else:

return n * jiecheng(n - 1)

candidate = list(range(1, n + 1))

res =

while candidate:

low_jiecheng = jiecheng(len(candidate) - 1)

high_index = math.ceil(k / low_jiecheng) - 1

high_num = candidate[high_index]

candidate.remove(high_num)

k = k - high_index * low_jiecheng

ans = ''

for i in range(len(res)):

ans += str(res[i])

return ans

if __name__ == '__main__':

n = 3

k = 3

s = solution()

ans = s.getpermutation(n, k)

print(ans)

LeetCode60 第k個排列

給出集合 1,2,3,n 其所有元素共有 n 種排列。按大小順序列出所有排列情況,並一一標記,當 n 3 時,所有排列如下 123 132 213 231 312 321 給定 n 和 k,返回第 k 個排列。說明 示例 1 輸入 n 3,k 3輸出 213 示例 2 輸入 n 4,k 9輸出 23...

leetcode 60 第k個排列

給出集合 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 ...

LeetCode 60 第k個排列

給出集合 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 ...