题目
类型:Math
难度:困难
解题思路
代码
public String getPermutation(int n, int k) { // 注意:相当于在 n 个数字的全排列中找到下标为 k - 1 的那个数,因此 k 先减 1 k --; int[] factorial = new int[n]; factorial[0] = 1; // 先算出所有的阶乘值 for (int i = 1; i < n; i++) { factorial[i] = factorial[i - 1] * i; } // 这里使用数组或者链表都行 List<Integer> nums = new LinkedList<>(); for (int i = 1; i <= n; i++) { nums.add(i); } StringBuilder stringBuilder = new StringBuilder(); // i 表示剩余的数字个数,初始化为 n - 1 for (int i = n - 1; i >= 0; i--) { int index = k / factorial[i] ; stringBuilder.append(nums.remove(index)); k -= index * factorial[i]; } return stringBuilder.toString(); }