[60] 排列序列

复制代码
 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 };
复制代码

 

posted @   人恒过  阅读(5)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本

阅读目录(Content)

此页目录为空

点击右上角即可分享
微信分享提示