力扣OJ 60. 第k個排列

給出集合 [1,2,3,…,n],其所有元素共有 n! 種排列。

按大小順序列出所有排列情況,並一一標記,當 n = 3 時, 所有排列如下:

"123"
"132"
"213"
"231"
"312"
"321"
給定 n 和 k,返回第 k 個排列。

說明:

給定 n 的範圍是 [1, 9]。
給定 k 的範圍是[1,  n!]。
示例 1:

輸入: n = 3, k = 3
輸出: "213"
示例 2:

輸入: n = 4, k = 9
輸出: "2314"

 

 

int listt[9] = { 1, 1, 2, 6, 24, 120, 720, 5040, 40320};
 
class Solution {
public:
string getPermutation(int n, int k) {
        vector<int>v(10,1);
        char c='0';
        string s="";
        for(int i=1;i<=9;i++)v[i]=i;
        for(int i=n-1;i>=0;i--)
        {
            int fac=listt[i];
            int r=(k+fac-1)/fac;
            s+=c+v[r];
            k-=(r-1)*fac;
            v.erase(v.begin()+r);
        }
        return s;
    }
};

 

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