The set [1,2,3,…,n]
contains a total of n! unique permutations.
By listing and labeling all of the permutations in order,
We get the following sequence (ie, for n = 3):
"123"
"132"
"213"
"231"
"312"
"321"
Given n and k, return the kth permutation sequence.
Note: Given n will be between 1 and 9 inclusive.
Solution:
class Solution {
public:
string getPermutation(int n, int k) {
vector<int> use(n);
for(int i = 0; i < n; ++i) use[i] = i + 1;
vector<int> fact(n, 1);
for(int i = 1; i < n; ++i) fact[i] = (i+1) * fact[i-1];
string res(n, '0');
if(k <= 0 || k > fact[n-1]) return "";
k--;
for(int i = 0; i < n; ++i)
{
int num = k * (n-i) / fact[n-1-i];
res[i] += use[num];
for(int j = num; j < n-1-i; ++j) use[j] = use[j+1];
k %= fact[n-1-i] / (n-i);
}
return res;
}
};