g0001_0100.s0060_permutation_sequence.Solution Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of leetcode-in-java21 Show documentation
Show all versions of leetcode-in-java21 Show documentation
Java-based LeetCode algorithm problem solutions, regularly updated
package g0001_0100.s0060_permutation_sequence;
// #Hard #Math #Recursion #2023_08_11_Time_0_ms_(100.00%)_Space_40.2_MB_(52.90%)
/**
* 60 - Permutation Sequence\.
*
* Hard
*
* 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`:
*
* 1. `"123"`
* 2. `"132"`
* 3. `"213"`
* 4. `"231"`
* 5. `"312"`
* 6. `"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!`
**/
public class Solution {
public String getPermutation(int n, int k) {
char[] res = new char[n];
// We want the permutation sequence to be zero-indexed
k = k - 1;
// The set bits indicate the available digits
int a = (1 << n) - 1;
int m = 1;
for (int i = 2; i < n; i++) {
// m = (n - 1)!
m *= i;
}
for (int i = 0; i < n; i++) {
int b = a;
for (int j = 0; j < k / m; j++) {
b &= b - 1;
}
// b is the bit corresponding to the digit we want
b &= ~b + 1;
res[i] = (char) ('1' + Integer.bitCount(b - 1));
// Remove b from the set of available digits
a &= ~b;
k %= m;
m /= Math.max(1, n - i - 1);
}
return String.valueOf(res);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy