题目:
给定参数n,从1到n会有n个整数:1,2,3,…,n,这n个数字共有 n! 种排列。按大小顺序升序列出所有排列情况,并一一标记,当 n = 3 时, 所有排列如下:
"123"
"132"
"213"
"231"
"312"
"321"
给定 n 和 k,返回第 k 个排列。
解题思路:
这是一道全排列的变种问题,给定参数n表示1~n范围内的整数。求所有排列,再根据参数k得到所有排列中的第k个元素。
这里需要注意第k个元素转换成索引形式应该是k-1,得到所有全排列的结果集res,返回res[k-1]就是题目要求返回的结果。
代码:
function factorials(n,k) {
let res = [] , path = [] , arr = []
for(let i = 1; i <= n; i++) {
arr.push(i)
}
const used = new Array(arr.length).fill(false)
backTracking()
return res[k-1]
//求全排列的函数
function backTracking() {
if(path.length == arr.length) {
res.push(Array.from(path))
return
}
for(let i = 0 ; i < arr.length ;i++) {
if(used[i]) {
continue
}
path.push(arr[i])
used[i] = true
backTracking()
used[i] = false
path.pop()
}
}
}
console.log(factorials(3,3)) //结果为:[ 2, 1, 3 ]