給出集合[1,2,3,…,n]
,其所有元素共有 n! 種排列。
按大小順序列出所有排列情況,並一一標記,當n = 3
時, 所有排列如下:
"123"
"132"
"213"
"231"
"312"
"321"
給定n
和k
,返回第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 ...