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 (ie, for n = 3):
"123"
"132"
"213"
"231"
"312"
"321"
Given n and k, return the kth permutation sequence.
Note: Given n will be between 1 and 9 inclusive.
这道题是一道数学题,发现规律后就知道第1位数字再出现(n-1)!后发生更改,第2位在出现(n-2)!后更改。。。
代码如下
public static String getPermutation(int n, int k) {
if (n <= 0)
return "";
StringBuilder res = new StringBuilder();
ArrayList<Integer> nums = new ArrayList<Integer>();
k--;
for (int i = 1; i <= n; i++)
nums.add(i);
int factorial = 1;
for (int i = n - 1; i >= 1; i--)
factorial *= i;
int round = n - 1;
while (round >= 0) {
int index = k / factorial;
k %= factorial;
res.append(nums.get(index));
nums.remove(index);
if (round > 0)
factorial /= round;
round--;
}
return res.toString();
}