题解 | #第K个n的排列#

第K个n的排列

https://www.nowcoder.com/practice/1595969179464e4c940a90b36abb3c54

数学推导过程:

对于n=4, k=15 找到k=15排列的过程:
 * 确定第一位:
        k = 14(从0开始计数)
        index = k / (n-1)! = 2, 说明第15个数的第一位是3 
        更新k
        k = k - index*(n-1)! = 2
    确定第二位:
        k = 2
        index = k / (n-2)! = 1, 说明第15个数的第二位是2
        更新k
        k = k - index*(n-2)! = 0
    确定第三位:
        k = 0
        index = k / (n-3)! = 0, 说明第15个数的第三位是1
        更新k
        k = k - index*(n-3)! = 0
    确定第四位:
        k = 0
        index = k / (n-4)! = 0, 说明第15个数的第四位是4
    最终确定n=4时第15个数为3214 
按照推导式编写:

let res = []
let candidates = []
let factorials = new Array(n+1)

factorials[0] = 1
let fact = 1

for(let i=1;i<=n;i++){
    candidates.push(i)
    fact *= i
    factorials[i] = fact
}
    
k-=1
for(let i=n-1;i>=0;i--){
    let index = Math.floor(k/factorials[i])
    console.log(index);
    res.push(candidates.splice(index,1))
    k-= index*factorials[i]
} 

return res.join('')


全部评论

相关推荐

头像
2024-11-07 01:12
重庆大学 Java
精致的小松鼠人狠话不多:签哪了哥
点赞 评论 收藏
分享
评论
1
收藏
分享
牛客网
牛客企业服务