LeetCode 60. Permutation Sequence
Description
The set
[1,2,3,...,n]
contains a total of n! unique permutations.By listing and labeling all of the permutations in order, we get the following sequence for n = 3:
"123"
"132"
"213"
"231"
"312"
"321"
Given
n
andk
, return thek-th
permutation sequence.Note:
- Given n will be between 1 and 9 inclusive.
- Given k will be between 1 and n! inclusive.
Example 1:
Input: n = 3, k = 3 Output: "213"
Example 2:
Input: n = 4, k = 9 Output: "2314"
假设存在长度为n
的数组:[1,2,3,...,n]
,输出第k
个排列。
Solution
一个长度为n
的数组,总共有n!
种排列。假设第一个数字固定后,剩余(n-1)!
种排列。
上图中的字典序树可以更直观的看出,
在n=4:[1,2,3,4]
中,
“第零层”包含4!=24
个叶子,
第一层包含3!=6
个叶子,
第二层包含2!=2
个叶子…
假设现在要查找第k=9
个排列(第九个叶子),第一层应该经过第⌈9/3!⌉
个分支,即ceil(k/(n-1)!)
。
由此公式,可以依次求每层分支序号。
比如k=9
,依次经过:
⌈9 / 3!⌉
:2
⌈9-3!*(2-1) / 2!⌉
:2
[9-3!*(2-1)-2!*(2-1) / 1!]
:1
1
通过序号:2,2,1,1
所经过的分支,可以得到结果:2314
|
|