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.
先要k--,因为题目里的k是从1开始的,我们这里要从0 开始。
permutation结果一共有n位,第k个数为 index * (n-1)! + k' (k'是对于下一轮n-1位的k,index是当前第n位上对于当前被排列的n个数字中,第index个大的数, index在0...n-1之间)
这样我们分别得到 index = k/(n-1)!, k' = k%(n-1)!
public String getPermutation(int n, int k) {
List<Integer> num = new ArrayList<Integer>();
for (int i = 0; i < n; i++) {
num.add(i+1);
}
int factorial = 1;
for (int i = 2; i < n; i++) {
factorial *= i;
}
StringBuilder res = new StringBuilder();
int round = n-1;
k--; // why?
while(round >= 0) {
int index = k/factorial;
res.append(num.get(index));
num.remove(index);
k = k%factorial;
if (round > 0) {
factorial /= round;
}
round--;
}
return res.toString();
}