排列序列
给出集合 [1,2,3,...,n],其所有元素共有 n! 种排列。
按大小顺序列出所有排列情况,并一一标记,当 n = 3 时, 所有排列如下:
- "123"
- "132"
- "213"
- "231"
- "312"
- "321"
给定 n 和 k,返回第 k 个排列。
示例 1:
输入:n = 3, k = 3
输出:"213"
1
2
2
/**
* @param {number} n
* @param {number} k
* @return {string}
*/
var getPermutation = function(n, k) {
let count = 0
let set = new Set()
function dfs(path) {
if(path.length === n) {
count++
if(count === k) {
return path.join("")
}
}
for(let i = 1; i <= n; i++) {
if(set.has(i)) continue
set.add(i)
path.push(i)
let res = dfs(path)
path.pop()
set.delete(i)
if(res) return res
}
}
return dfs([])
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/permutation-sequence