Skip to content
On this page

60. 排列序列

原题链接:LeetCode 60. 排列序列

题目描述

给出集合 [1,2,3,...,n],其所有元素共有 n! 种排列。

按大小顺序列出所有排列情况,并一一标记,当 n = 3 时, 所有排列如下:

  • "123"

  • "132"

  • "213"

  • "231"

  • "312"

  • "321"

给定 n 和 k,返回第 k 个排列。

示例 1:

  • 输入: n = 3, k = 3
  • 输出: "213"

示例 2:

  • 输入: n = 4, k = 9
  • 输出: "2314"

示例 3:

  • 输入: n = 3, k = 1
  • 输出: "123"

提示:

  • 1
  • 1

难度: Hard


题解代码

javascript
/**
 * @param {number} n
 * @param {number} k
 * @return {string}
 */
 let stop = false
 let target = ''
var getPermutation = function(n, k) {
  stop = false
  target = ''
  const used = Array(n).fill(false)
  const ret = []
  backTrack(n, [], ret, k, used)
  return target
};

function backTrack (n, path, ret, k, used) {
  if (path.length === n) {
    ret.push(path.join(''))
    if (ret.length === k) {
      stop = true
      target = ret[k - 1]
    } 
  }
  for (let i = 1; i < n + 1; i++) {
    if (stop) continue
    if (!used[i]) {
      path.push(i)
      used[i] = true
      backTrack(n, path, ret, k, used)
      path.pop()
      used[i] = false
    }
    
  }
}

技术文档集合