与46类似,faster than 16%
/**
* @param {number} n
* @param {number} k
* @return {string}
*/
var getPermutation = function(n, k) {
var nums = new Array(n)
for(var i = 0; i < n; i++) nums[i] = i + 1
var v = nums.slice()
var res = []
permuteDFS(k, nums, v, '', res)
return res[k - 1]
};
var permuteDFS = function(k, nums, v, sub, res){
if(res.length == k) return
if(sub.length === nums.length){
if(res.length == k- 1) res.push(sub)
else res.push(0)
}else{
for(var i = 0; i < nums.length; i++){
if(v[i] === nums[i]){
v[i] = ''
sub += nums[i]
permuteDFS(k, nums, v, sub, res)
sub = sub.substring(0, sub.length - 1)
v[i] = nums[i]
}
}
}
}
最高位出现 (n-1)! 次,第一位数字的下标是k/ (n-1)!,将该数字取出,重新对剩下的进行全排列
faster than 100%
/**
* @param {number} n
* @param {number} k
* @return {string}
*/
var getPermutation = function(n, k) {
let s = ['1', '2', '3', '4', '5', '6', '7', '8', '9']
var res = ''
var factorial = [1]
for (let i = 1; i < n; i++) {
factorial[i] = factorial[i - 1] * i
}
k--
for(var i = n; i >= 1; i--){
var j = Math.floor(k/factorial[i - 1])
k %= factorial[i - 1]
res += s[j]
s.splice(j, 1)
}
return res
};