题目

类型:Math
难度:困难
image.png

解题思路

image.png

代码

  1. public String getPermutation(int n, int k) {
  2. // 注意:相当于在 n 个数字的全排列中找到下标为 k - 1 的那个数,因此 k 先减 1
  3. k --;
  4. int[] factorial = new int[n];
  5. factorial[0] = 1;
  6. // 先算出所有的阶乘值
  7. for (int i = 1; i < n; i++) {
  8. factorial[i] = factorial[i - 1] * i;
  9. }
  10. // 这里使用数组或者链表都行
  11. List<Integer> nums = new LinkedList<>();
  12. for (int i = 1; i <= n; i++) {
  13. nums.add(i);
  14. }
  15. StringBuilder stringBuilder = new StringBuilder();
  16. // i 表示剩余的数字个数,初始化为 n - 1
  17. for (int i = n - 1; i >= 0; i--) {
  18. int index = k / factorial[i] ;
  19. stringBuilder.append(nums.remove(index));
  20. k -= index * factorial[i];
  21. }
  22. return stringBuilder.toString();
  23. }