位元組專題 leetcode 60 第k個排列

2021-09-27 16:17:46 字數 1306 閱讀 6589

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 = 3

輸出: "213"

示例 2:

輸入: n = 4, k = 9

輸出: "2314"

第一想法是修改一下46. 全排列**,加個計數器數到第k個就返回,雖然能過,但是時間效率很差。

那麼這裡其實可以加剪枝,並不需要都遍歷到葉子節點,很多都是可以跳過的,以n = 4, k = 9為例,第一層,以1開頭,後面有3個數「2、3、4」可選,以1開頭的全排列一共有3!=6個,並且6**寫得有點醜不管了。。

int k;

string ans;

public

static

void

main

(string[

] args)

public string getpermutation

(int n,

int k)

private

void

permutation

(int n, string str,

boolean

visited)

return;}

int ps =

factorial

(n-1

-str.

length()

);for(

int i =

1;i<=n;i++

) visited[i]

=true

;permutation

(n, str+string.

valueof

(i), visited)

; visited[i]

=false;if

(ans!=null)

return;}

}private

intfactorial

(int n)

return res;

}

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