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.
Example 1:
Input: n = 3, k = 3 Output: "213"
Example 2:
Input: n = 4, k = 9 Output: "2314"
Example 3:
Input: n = 3, k = 1 Output: "123"
Constraints:
1 <= n <= 9
1 <= k <= n!
Related Topics:
Math, Backtracking
Similar Questions:
// OJ: https://leetcode.com/problems/permutation-sequence/
// Author: github.com/lzl124631x
// Time: O(NK)
// Space: O(1)
class Solution {
public:
string getPermutation(int n, int k) {
string ans;
for (int i = 0; i < n; ++i) ans += ('1' + i);
while (--k) next_permutation(begin(ans), end(ans));
return ans;
}
};
// 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 fact = 1;
string ans;
for (int i = 1; i <= n; ++i) {
fact *= i;
ans += '0' + i;
}
--k;
for (int i = 0; i < n; ++i) {
fact /= n - i;
int j = k / fact + i, tmp = ans[j];
for (; j > i; --j) ans[j] = ans[j - 1];
ans[j] = tmp;
k %= fact;
}
return ans;
}
};