欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

LeetCode刷题记录 - 60.第k个排列

程序员文章站 2022-01-15 11:59:40
...

执行用时:4ms

语言:cpp

思路:和求十进制数各位数类似,用k/(n-1)!判断每一位是该位的第几轮排列,再让k%(n-1)!计算下一位

代码:

class Solution {
public:
    string getPermutation(int n, int k) {
        int m = fac(n);
        string res = "";
        vector<int> tb;
        
        for(int i = 1;i <= n;i++){
            tb.push_back(i);
        }
        
        int i = n -1;
        k--;
        
        while(i > 0){
            int t = fac(i);
            int j = k / t;
            
            char c = (tb[j] + '0');
            res += c;
            
            tb.erase(tb.begin()+j);
            k %= t;
            i--;
        }
        
        res += (tb[0] + '0');
        return res;
    }
    
private:
    int fac(int n){
        int res = 1;
        for(int i = 2;i <= n;i++){
            res *= i;
        }
        return res;
    }
};

 

相关标签: leetcode