Leetcode 60 第k個排列詳解

 

我們不是從低位到高位確定排列,而是反過來,從高位到低位:

最高位有n種填法,餘下的是n-1!種填法。

n=3,k=3,n-1! = 2, 所以第一位是2,剩下兩位是2,1,3,

n=4,k=9,n-1!=6, 所以第一位是2,

 

class Solution {
public:
    string getPermutation(int n, int k) {
        string res;
        vector<bool> isUsed(n,false);
        for(int i=0;i<n;i++){
            int fact = 1;
            for(int j=1;j<=n-i-1;j++) fact*=j;
            for(int j=1;j<=n;j++){
                if(isUsed[j]) continue;
                if(k>fact) k-=fact;
                else{
                    res+=to_string(j);
                    isUsed[j] = true;
                    break;
                }
            }
        }
        return res;
    }
};

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章