class Solution {
//对于n, 有n!种排列, 则可以通过计算k 与 n! 的倍数来判断当前的数字, 比如n=3, k=3, 此时第一个数字肯定为2, 因为第一个数字为1的排列种数为2个
public String getPermutation(int n, int k) {
int[] nums = new int[n-1];
List<Integer> list = new LinkedList<>();
if(n > 1){
nums[0] = 1;
}
for (int i = 1; i < n-1; i++){ //存储n!, 用于判断
nums[i] = nums[i-1]*(i+1);
}
for(int i = 0; i < n; i++){
list.add(i+1);
}
StringBuilder sb = new StringBuilder();
k--;
for(int i = n-1; i > 0;i--){
int index = k/ nums[i-1];
k = k % nums[i-1];
sb.append(list.get(index));
list.remove(index);
}
sb.append(list.get(0));
return sb.toString();
}
}
60.第k个排列
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- 阳春三月、万物复苏,在这个春暖花开季节里,威海若维信息科技有限公司(简称若维教育)、若维俱乐部(哈工大)和威高讯通...
- 工作 工作方面尽量站在架构师角度去考虑问题。本周一个京东电话面试,通过这样几个问题来查看我的能力是否符合优秀高...