其实很明显该排序强调的从小到大的排序就提示该题存在一定规律,比如如果k在[1,(n-1)!)之间时,那么我们就可以确定第一位数字为1,k在[(n-1)!,2*(n-1)!)之间时,那么第一位就是2.以此类推。
我们用一个数组来记录阶乘。然后开始对该字符串所有位置的的数值进行确定。
class Solution {
public String getPermutation(int n, int k) {
int[] map = new int[n];
for(int i = 0 ; i < n ; ++i){
if(i == 0) map[i] = 1;
else map[i] = map[i-1]*i;
}
--k;
StringBuilder res = new StringBuilder();
int[] falg = new int[n+1];
Arrays.fill(falg,1);
for(int i = 1 ; i < n+1 ; ++i){
int order = k / map[n - i] + 1;
for(int j = 1 ; j < n+1 ; ++j){
order-=falg[j];
if(order == 0){
falg[j] = 0;
res.append(j);
break;
}
}
k %= map[n - i];
}
return res.toString();
}
}
原文:https://www.cnblogs.com/jiezao/p/13618417.html