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 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.
- Given k will be between 1 and n! inclusive.
Example 1:
Input: n = 3, k = 3 Output: "213"
Example 2:
Input: n = 4, k = 9 Output: "2314"
Companies:
Google
Related Topics:
Math, Backtracking
Similar Questions:
// OJ: https://leetcode.com/explore/challenge/card/june-leetcoding-challenge/541/week-3-june-15th-june-21st/3366/
// Author: github.com/lzl124631x
// Time: O(NK)
// Space: O(N)
class Solution {
public:
string getPermutation(int n, int k) {
string s;
for (int i = 0; i < n; ++i) s += ('1' + i);
while (--k) next_permutation(s.begin(), s.end());
return s;
}
};// OJ: https://leetcode.com/problems/permutation-sequence/
// Author: github.com/lzl124631x
// Time: O(N^2)
// Space: O(1)
class Solution {
public:
string getPermutation(int n, int k) {
int fac = 1;
string ans;
for (int i = 1; i <= n; ++i) {
fac *= i;
ans += '0' + i;
}
--k;
for (int i = 0; i < n; ++i) {
fac /= n - i;
int j = k / fac + i, tmp = ans[j];
for (; j > i; --j) ans[j] = ans[j - 1];
ans[j] = tmp;
k %= fac;
}
return ans;
}
};