美文网首页
60. 第k个排列

60. 第k个排列

作者: geaus | 来源:发表于2022-11-24 20:19 被阅读0次

题目描述

给出集合 [1,2,3,…,n],其所有元素共有 n! 种排列。
按大小顺序列出所有排列情况,并一一标记,当 n = 3 时, 所有排列如下:

"123"
"132"
"213"
"231"
"312"
"321"

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

说明:
给定 n 的范围是 [1, 9]。
给定 k 的范围是[1, n!]。

示例 1:
输入: n = 3, k = 3
输出: "213"

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

解题思路

因为n的范围就是1~9,我们可以枚举出每个n下的全排列数。

0,1,2,6,24,120,720,5040,40320,362880,3628800
分别为对应0~10的阶乘。

使用k/(n-1)!,得到第一位数,然后k=k%(n-1)!,如此直到k=0。

string getPermutation(int n, int k){
      vector<int> fac = {0,1,2,6,24,120,720,5040,40320,362880,3628800};
      string ret;
      string s = string("123456789").substr(0, n);
      --k;
      while(k>0){
            size_t i = k/fac[n-1];
            ret.push_back(s[i]);
            s.erase(s.begin()+i);
            k = k%fac[n-1];
            --n;
      }
      return ret+s;
}

相关文章

  • 60.第k个排列

  • 60. 第k个排列

    题目描述 给出集合 [1,2,3,…,n],其所有元素共有 n! 种排列。按大小顺序列出所有排列情况,并一一标记,...

  • 60. 第k个排列

    给出集合 [1,2,3,…,n],其所有元素共有 n! 种排列。 按大小顺序列出所有排列情况,并一一标记,当 n ...

  • 60. Permutation Sequence/第k个排列

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

  • Leetcode 数学类型总结

    7.整数反转 12.整数转罗马数字 13.罗马数字转整数 29.两数相除 50.Pow(x,y) 60.第k个排列...

  • LeetCode 力扣 60. 第k个排列

    题目描述(中等难度) 又是一道全排列的题,之前在31题,46题,也讨论过全排列问题的一些解法。这道题的话,是给一个...

  • 第k个排列

    https://leetcode-cn.com/explore/interview/card/bytedance/...

  • 输出数组的全排列

    思想: n 个元素数组全排列 = 第 1 个前缀 + 后 n - 1 个元素全排列 输出第 k 个元素之后的全排列...

  • 60.第k个序列

    题目给出集合 [1,2,3,…,n],其所有元素共有 n! 种排列。 按大小顺序列出所有排列情况,并一一标记,当 ...

  • 子集、全排列、第k个排列

    子集输出 全排列输出 存在重复数字的全排列 给出集合 [1,2,3,…,n],其所有元素共有 n! 种排列。 按大...

网友评论

      本文标题:60. 第k个排列

      本文链接:https://www.haomeiwen.com/subject/rikyrktx.html