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;
    
    }
posted @ 2020-01-13 19:51  猪突猛进!!!  阅读(82)  评论(0编辑  收藏  举报