60. Permutation Sequence

Difficulty:
Related Topics:
Similar Questions:

Problem

The set [1,2,3,...,**n**] contains a total of n! unique permutations.

By listing and labeling all of the permutations in order, we get the following sequence for n = 3:

Given n and k, return the kth permutation sequence.

Note:

Example 1:

Input: n = 3, k = 3
Output: "213"

Example 2:

Input: n = 4, k = 9
Output: "2314"

Solution

/**
 * @param {number} n
 * @param {number} k
 * @return {string}
 */
var getPermutation = function(n, k) {
  var str = '';
  var nums = [1, 2, 3, 4, 5, 6, 7, 8, 9];
  var factorial = [1, 1, 2, 6, 24, 120, 720, 5040, 40320, 362880]; // n!
  var tmp1 = 0;
  var tmp2 = 0;

  k--;

  for (var j = n; j >= 1; j--) {
    tmp1 = factorial[j - 1];
    tmp2 = Math.floor(k / tmp1);

    k %= tmp1;
    str += nums[tmp2];

    nums.splice(tmp2, 1);
  }

  return str;
};

Explain:

用回溯的方法会超时, 需要用数学规律解的.就是依次找出放在第 index 位的数字。

k-- 这里比较难理解,是用来纠正 k 正好整除于某个阶乘数的特殊情况,即 k % factorial[i] === 0 时。

Complexity:

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy