1 /**
2 * @param {number} n
3 * @param {number} k
4 * @return {string}
5 */
6 const getPermutation = function (n, k) {
7 const list = new Array(n).fill(1).map((v, i) => ++i);
8 let num = 1;
9 const numList = [];
10 for (let i = 1; i < n; i++) {
11 num *= i;
12 numList[i] = num;
13 }
14 const ans = [];
15 const dfs = p => {
16 if (p === 1) {
17 return [...ans, ...list].join('');
18 }
19 const len = list.length - 1;
20 if (p > numList[len]) {
21 const newP = p % numList[len];
22 const t = (p - newP) / numList[len];
23 if (newP === 0) {
24 ans.push(list.splice(t - 1, 1)[0]);
25 return [...ans, ...list.reverse()].join('');
26 } else {
27 ans.push(list.splice(t, 1)[0]);
28 return dfs(newP);
29 }
30 } else {
31 ans.push(list.splice(0, 1)[0]);
32 return dfs(p);
33 }
34 };
35 return dfs(k);
36 };