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.
class Solution {
public:
void backtrace(string &ans, vector<int> &flag, vector<int> fac, string &str, int s, int k, int n){
if(s == n){
ans = str;
return;
}
s++;
int x;
x = (k - 1) / fac[n - s];
int t = 0;
int i;
for(i = 0; i < n; i++){
if(!flag[i]){
if(t >= x){
flag[i] = 1;
break;
}
t++;
}
}
if(i == n){
return;
}
str += ((i + 1) + '0');
k = k - x * fac[n - s];
backtrace(ans, flag, fac, str, s, k, n);
}
string getPermutation(int n, int k) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
string ans;
vector<int> fac(n, 1);
fac[0] = 1;
for(int i = 1; i<n; i++){
fac[i] = fac[i - 1] * i;
}
vector<int> flag(n+1, 0);
int index = 0;
string str="";
backtrace(ans, flag, fac, str, 0, k, n);
return ans;
}
};