第K个排列(力扣第60题)

在n个数字升序全排列的数组中找到下标为k-1的那个数

从数字的最高位,一位一位的找出第k个数字的每一位

新建一个数组,从1到n,升序,把这些数字放到数组中

先找第一位,在1到n这些数字中,从这个n个数字的每一个数字开头的数的个数有(n-1)!个

那么,第k个数字的第一位为 k-1/(n-1)!,得到的数为第一位数字在数组中的下表 index

第二位,的问题又变成了, 在n-1个数字升序全排列的数组中找到下标为k-1-(n-1)!* index的那个数.

由第二位的规律,可以推算出每一位的值。java代码为:

class Solution {public String getPermutation(int n, int k) {//相当于n个数字全排列的数组,找到下标为k-1的那个数k = k-1;//0到n-1位置的阶乘数组int[] factorial = new int[n];factorial[0] = 1;for(int i =1;i list = new LinkedList<>();for(int i=1;i<=n;i++){list.add(i);}StringBuilder stringBuilder = new StringBuilder();for(int i = n-1;i>=0;i--){int index = k/factorial[i];stringBuilder.append(list.remove(index));k = k - index * factorial[i];}return stringBuilder.toString();}
}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部