题意理解:
将0-n按照从小到大的顺序进行全排序,求解第k个排列结果
题目分析:
穷举会超时,找规律,
1)第k个排列的第一个元素在0-n中的位置为(k-1)/(n-1)!
2)在剩下的元素中继续找第一个;
3)依此类推;
在Java中使用String一直会超时,最终使用StringBuilder;
解题代码:
public class Solution {
private int calFactorial(int n){
int ans=1;
for(int i=1;i<=n;i++){
ans*=i;
}
return ans;
}
public String getPermutation(int n, int k) {
StringBuilder ans=new StringBuilder("");
int num=k;
StringBuilder s=new StringBuilder("");
int factorial=calFactorial(n);
for(int i=1;i<=n;i++){
s.append(i);
}
for(int i=n;i>=1;i--){
factorial/=i;
int index=(num-1)/factorial;
String tmp=""+s.charAt(index);
ans.append(tmp);
num-=index*factorial;
s=s.deleteCharAt(index);
}
return ans.toString();
}
}