您的位置:首页 > 产品设计 > UI/UE

LeetCode-60-Permutation Sequence(找规律)-Medium

2016-03-04 09:07 381 查看
题意理解:

将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();
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: