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

60. 第k个排列

作者: 薄荷糖的味道_fb40 | 来源:发表于2019-04-17 15:41 被阅读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"

    思路:

    第i项取值一定是对应(n-i)!个排列中的某一项,具体哪一项可以通过除法方式得到,取模的结果则作为下一项判断的依据,具体实现代码如下。

    class Solution {
    public:
        string getPermutation(int n, int k) {
            vector<int> fac(n+1,1);
            string res;
            string range="123456789";
            for(int i=2;i<=n;i++)
            {
                fac[i]=i*fac[i-1];
            }
            k--;
            for(int i=n-1;i>=0;i--)
            {
                int temp=k/fac[i];
                k=k%fac[i];
                res.push_back(range[temp]);
                range.erase(temp,1);
            }
            return res;
        }
        
    };
    

    相关文章

      网友评论

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

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