60 第k個排列

2021-09-25 06:47:34 字數 1288 閱讀 4991

給出集合[1,2,3,…,n],其所有元素共有 n! 種排列。

按大小順序列出所有排列情況,並一一標記,當n = 3時, 所有排列如下:

"123""132""213""231""312""321"

給定nk,返回第k個排列。

說明

輸入: n = 3, k = 3

輸出: "213"

輸入: n = 4, k = 9

輸出: "2314"

class

solution

:def

getpermutation

(self, n:

int, k:

int)

->

str:

ifnot n:

return

nums =

[i for i in

range(1

, n+1)

] visited =

[false

for _ in

range

(n)]

factorial =[1

,1,2

,6,24

,120

,720

,5040

,40320

,362880

] res =

defbacktrack

(n, k, depth)

:if depth == n:

return

''.join(res)

ps = factorial[n -

1- depth]

for i in

range

(n):

if visited[i]

:continue

if ps < k:

k -= ps

continue

str(nums[i]))

visited[i]

=true

return backtrack(n, k, depth+1)

return backtrack(n, k,

0)

60 第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 輸出 ...

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 ...

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 ...