链接:LeetCode60
过程:意识到暴力不可取,想直接算第k个,看了看题解。
思路:问题转化,缩小求解规模,抛弃无用计算
代码:
class Solution {
public String getPermutation(int n, int k) {
int[] factorial=new int[n];
factorial[0]=1;
for(int i=1;i<n;i++)factorial[i]=factorial[i-1]*i;
StringBuilder sb=new StringBuilder();
int[] vis=new int[n];
Arrays.fill(vis,1);
k--;
for(int i=1;i<=n;i++){
int last=k/factorial[n-i]+1;
for(int j=0;j<n;j++){
last-=vis[j];
if(last==0){
sb.append(j+1);
vis[j]=0;
break;
}
}
k%=factorial[n-i];
}
return sb.toString();
}
}