美文网首页
60. Permutation Sequence

60. Permutation Sequence

作者: jecyhw | 来源:发表于2019-05-29 10:42 被阅读0次

题目链接

https://leetcode.com/problems/permutation-sequence/

解题思路

n个数要求第k个排列,可以先根据k在n个数里面先确定第一个数并更新k,之后问题就变成了在剩下的n-1数里面找更新后的第k个排列的子问题。

代码

class Solution {
public:
    string getPermutation(int n, int k) {
        vector<int> fac(n + 1, 0);
        vector<int> nums(n);

        //fac[i]表示i的阶乘 num[i]是i+1
        fac[0] = 1;
        for (int i = 1; i <= n; ++i) {
            fac[i] = fac[i - 1] * i;
            nums[i - 1] = i;
        }

        string ans;
        while (!nums.empty()) {
            //在nums数组里确定取哪个数
            int &t = fac[nums.size() - 1];
            //i表示取的nums数组里的第几个数,从1开始
            int i = k / t;
            if (k % t != 0 || i == 0) {
                i++;
            }
            //更新k
            k = k - (i - 1) * t;
            ans.push_back((char) (nums[i - 1] + '0'));
            nums.erase(nums.begin() + i - 1);
        }
        return ans;
    }
};

相关文章

网友评论

      本文标题:60. Permutation Sequence

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