题解 | #第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('')