给定参数n,从1到n会有n个整数1,2,3,...,n,这n个数组共有n!种排列,按照大小顺序升序排列出所有列的情况,并一一标记,给定n和k,返回第k个值
参考:LeetCode 46题
// 回溯法:列出所有可能的序列
var permute = function (nums) {
var res = []
diff([])
function diff(path) {
if (path.length === nums.length) {
res.push([...path]);
return;
}
for(let i=0;i<nums.length;i++) {
if(path.includes(nums[i])) {
continue;
}
path.push(nums[i]);
diff(path);
path.pop();
console.log(path);
}
}
return res;
};
function getNums(n,k) {
let nums = [];
for(let i=1;i<=n;i++) {
nums.push(i);
}
// 得到所有的可能序列,并将序列二维数组转为数字一维数组,按升序排列后直接取出地K项
let res = permute(nums).map((res,ind)=>{
return parseInt(res.join(''));
}).sort();
return res[k-1];
}
console.log(getNums(3,3)); //213