Skip to content

60. 排列序列 #68

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
}

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions