【LeetCode】60. Permutation Sequence

    xiaoxiao2021-03-25  107

    题目描述

    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 (ie, for n = 3):

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

    Given n and k, return the kth permutation sequence.

    Note: Given n will be between 1 and 9 inclusive.

    解题思路

    排列本身是有规律的,所以直接根据数学规律算出结果就好了。

    AC代码

    class Solution { public: string getPermutation(int n, int k) { string ans; //记录数字1到n vector<char> nums; //记录1到n的阶乘,因为全排序的个数是n的阶乘 vector<int> fac; fac.push_back(0); int mul = 1; for (int i = 1; i <= n; ++i) { nums.push_back(i + '0'); mul *= i; fac.push_back(mul); } k -= 1; int curIdx = 0; for (int i = 0; i < n - 1; ++i) { curIdx = k / fac[n - i - 1]; ans.push_back(nums[curIdx]); //当前数字已经加入排序中,移除 nums.erase(nums.begin() + curIdx); k %= fac[n - i - 1]; } ans.push_back(nums[0]); return ans; } };
    转载请注明原文地址: https://ju.6miu.com/read-14403.html

    最新回复(0)