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.
Solutions: Caculates the index of the first number by idx = (k -1) / (n-1)! , and the new k and new n, then goes to next round.
1 string getPermutation(int n, int k) { 2 vector<int> nums; 3 vector<int> factors(1,1); 4 for(int i = 1; i <= n; i++){ 5 nums.push_back(i); 6 factors.push_back(factors[i - 1] * i); 7 } 8 9 string ret; 10 while(k > 0 && nums.size() > 0) { 11 int idx = (k -1) / factors[n -1]; 12 ret.push_back(nums[idx] + 48); 13 nums.erase(nums.begin() + idx); 14 k = k - idx * factors[n - 1]; 15 n --; 16 } 17 18 return ret; 19 }