链接: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();
}
}
本文探讨了LeetCode上的第60题,寻找第k个排列。通过算法优化,避免了暴力求解,实现了直接计算第k个排列的高效方法。文章详细介绍了问题转化和求解规模缩小的技巧,分享了一段Java实现代码。

被折叠的 条评论
为什么被折叠?



