题目描述:

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;
    
    }

相关文章:

  • 2021-06-26
  • 2021-12-31
  • 2019-12-23
  • 2021-06-11
  • 2021-12-31
  • 2021-08-18
猜你喜欢
  • 2021-11-21
  • 2021-06-22
  • 2021-12-16
  • 2021-09-28
  • 2022-12-23
  • 2021-09-02
  • 2021-06-05
相关资源
相似解决方案