题解 | #第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('')
查看17道真题和解析