[排列] leetcode 60 Permutation Sequence

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

        求第k个排列数。数学解法,可以找一下规律。比如对于1234的排列数,一共有24种。我们从左到右依次决定排列数是哪些。首先第一个数有4种可选的,一共有24种,那么每种就是6个,我们用 k / 6,看它落在哪个区间,就取哪个数字。

        之后,还有三个数可选,因为一共有6种,所以每种有2个,我们计算k / 2……以此类推得到所有位的数字。因为k从0计数算起来更简单,所以我们一开始做k--。

class Solution {
public:
    string getPermutation(int n, int k) {
        string ans;
        string permutation;
        
        int m = 1;
        for(int i = 1;i <= n;i++)
        {
            m *= i;
            permutation.push_back(i + '0');
        }

        k--;
 
        for(int i = n;i > 0; i--)
        {
            m = m / i;
            int j = k / m;
            ans.push_back(permutation[j]);
            permutation.erase(permutation.begin() + j);
            k = k % m;            
        }
        return ans;
    }
};

 

posted @ 2019-08-11 21:18  fish1996  阅读(83)  评论(0编辑  收藏  举报