60. Permutation Sequence
Description
描述:https://leetcode.com/problems/permutation-sequence/description/
题意:给定1~n这n个数,返回第k个排列。
Solution: (Java)
class Solution {
public String getPermutation(int n, int k) {
List<Integer> nums = new ArrayList<>(); //保存1~n这n个数
nums.add(1);
int[] factorial = new int[n]; //保存各0~n-1的阶乘作为基底
factorial[0] = 1; //0的阶乘为1
for (int i = 1; i < n; i++) {
nums.add(i + 1);
factorial[i] = factorial[i - 1] * i;
}
k--; //为了与 阶乘数制 对应上
StringBuilder result = new StringBuilder();
for (int i = n - 1; i >= 0; i--) {
int idx = k / factorial[i]; //计算各阶乘基底的系数,作为排列和删除操作的下标
k = k - idx * factorial[i];
result.append(nums.get(idx));
nums.remove(idx);
}
return result.toString();
}
}
思路
- 本题的思路是用阶乘数制的方法,runtime 1ms,超过100%,用回溯的方法也能解,只不过太耗时了;
- 用阶乘数制还是挺巧妙的,详细可以看官方的解释。