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.
//#60 Permutation Sequence
//4ms 28.74%
class Solution {
public:
string getPermutation(int n, int k)
{
string result;
if(k > getFactorial(n)) return result;
vector<int> nums(n, 0);
for(int i=0; i<n; i++)
{
nums[i] = i+1;
}
for(int i=0; i<n; i++)
//determine the corresponding item one by one
{
//cout << "Current session is " << n-i << endl;
//cout << "k = " << k << endl;
int insert_num = (k-1) / getFactorial(n-i-1);
//cout << "insert_num = " << insert_num << endl;
if(insert_num > 0)
{
result.push_back( nums[insert_num] + '0' );
//cout << "inserting " << nums[insert_num] << " into string\n";
nums.erase(nums.begin()+insert_num);
k = k - insert_num * getFactorial(n-i-1);
}
else
{
result.push_back( nums[0] + '0' );
nums.erase(nums.begin());
}
}
return result;
}
int getFactorial(int n)
{
if(n==1 || n==0) return 1;
else return n*getFactorial(n-1);
}
};