问题原始链接 https://leetcode.com/problems/permutation-sequence
集合 [1,2,3,...,5] 总共包含 n! 个不同的排列。
按顺序列出并标记每个排列,对于 n = 3,有以下序列:
1. "123"
2. "132"
3. "213"
4. "231"
5. "312"
6. "321"
给定 n 和 k,返回第 k 个排列序列。
注意:给定的 n 在属于 [1..9]。
public class Solution {
public static String getPermutation(int n, int k) {
int[] factorial = factorial(n);
List<Integer> list = new ArrayList<Integer>(Arrays.asList(1, 2, 3, 4, 5, 6,
7, 8, 9));
String result = "";
for (int i = n - 1; i >= 0; i--) {
int d = k == 0 ? 0 : (k - 1) / factorial[i];
result += list.get(d);
list.remove(d);
if (k != 0) {
k = k - d * factorial[i];
}
}
return result;
}
private static int[] factorial(int n) {
int[] f = new int[n + 1];
f[0] = 1;
f[1] = 1;
for (int i = 2; i <= n; i++) {
f[i] = f[i - 1] * i;
}
return f;
}
}