现在的位置: 主页 > 商讯 > 文章正文

[LeetCode][Java] Permutation Sequence

作者:成都渝祥金属丝网制品有限公司 来源:www.cdyuxiang.com 未知发布时间:2017-09-08 18:20:43
[LeetCode][Java] Permutation Sequence

The set [1,2,3,…,n] contains a total of n! unique permutations.

By listing and labeling all of the permutations in order,
We get the following sequence (ie, for n = 3):

123

132

213

231

312

321

Given n and k, return the kth permutation sequence.

Note: Given n will be between 1 and 9 inclusive.

题意:

集合[1,2,3,…,n] 包含一共n!不同的存在且唯一的组合。

通过按顺序列出并标记这些所有的组合。我们得到下面这个序列(当n = 3 的时候):

123

132

213

231

312

321 给定 n 和 k,返回序列中的第 k 个元素。n 为 1 到 9 之间的一个数。 算法分析:

方法一:

利用了题目《permutations》的方法,先得到所有的排列,然后找出第 k 个元素,但是超时了,后面也给出代码吧

方法二:

参考博客

数学的解法,适用度不高,仅限于这题,了解一下吧。

题目告诉我们:对于n个数可以有n!种排列;那么n-1个数就有(n-1)!种排列。

那么对于n位数来说,如果除去最高位不看,后面的n-1位就有 (n-1)!种排列。

所以,还是对于n位数来说,每一个不同的最高位数,后面可以拼接(n-1)!种排列。

所以你就可以看成是按照每组(n-1)!个这样分组。

利用 k/(n-1)! 可以取得最高位在数列中的index。这样第k个排列的最高位就能从数列中的index位取得,此时还要把这个数从数列中删除。

然后,新的k就可以有k%(n-1)!获得。(恕我愚笨,现在也没想明白为啥要这么更新k~~)

循环n次即可。 同时,为了可以跟数组坐标对其,令k先--。


AC代码:

方法一:(超时了)

public String getPermutation(int n, int k) { int num[]=new int[n]; ArrayList

企业建站2800元起,携手武汉肥猫科技,做一个有见地的颜值派!更多优惠请戳:荆州SEO http://jingzhou.4567w.com

上一篇:Python如何导入模块 下一篇:最后一页