Leetcode 60 第k个排列

题目描述:

题解: 找规律。定义f[i]为从位置i到位置n排列的个数。每一个数字在位置i上出现的次数是固定的,为f[i+1],根据这个规律依次求解每一位上的值。

具体过程如下:

AC代码:

 string getPermutation(int n, int k) {
        string ans = "";
        string num = "123456789";
        int f[10];
        f[n] = 1;
        int cnt = 2;
        for(int i=n-1;i>=1;i--) 
        {
            f[i] = f[i+1]*cnt;
            cnt++;
        }
        int now;
        int tmp;
        for(int i=1;i<n;i++)
        {
            if(k == 0)
            {
                int end = n-i+1;
                ans+=num[end-1];
                num.erase(end-1,1);
                continue;
            }
            
            now = k/f[i+1];
            tmp = k%f[i+1];
            if(tmp != 0 ) now++;
            ans += num[now-1];
            num.erase(now-1,1);
            k = tmp;
        }
        ans+=num[0];
       return ans;
    
    }
原文地址:https://www.cnblogs.com/z1141000271/p/12189040.html