Skip to content

60. 排列序列 #68

Open
Open
@buuing

Description

@buuing

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

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

  1. "123"
  2. "132"
  3. "213"
  4. "231"
  5. "312"
  6. "321"

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

示例 1:

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

示例 2:

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

示例 3:

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

提示:

  • 1 <= n <= 9
  • 1 <= k <= n!

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/permutation-sequence
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。




  • 数学规律求解
const getPermutation = (n, k) => {
  const nums = new Array(n).fill().map((_, i) => i + 1)
  const totalArr = [0, 1]
  for (let i = 2; i <= n; i++) {
    totalArr[i] = totalArr[i - 1] * i
  }
  let total = totalArr[n], res = ''
  while (nums.length) {
    const index = Math.ceil(k / total * n) - 1
    const num = nums.splice(index, 1)[0]
    res += num
    k = k % (total / n) || (total / n)
    total = totalArr[--n]
  }
  return res
}

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions