給出集合 [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;
}
};