您的位置:首页 > 其它

leetcode_60. 第k个排列

2020-09-05 10:23 1321 查看

目录

一、题目内容

二、解题思路

三、代码

一、题目内容

给出集合 [1,2,3,…,n],其所有元素共有 n! 种排列。

按大小顺序列出所有排列情况,并一一标记,当 n = 3 时, 所有排列如下:

"123"
"132"
"213"
"231"
"312"
"321"
给定 n 和 k,返回第 k 个排列。

说明:

给定 n 的范围是 [1, 9]。
给定 k 的范围是[1,  n!]。

示例 1:

输入: n = 3, k = 3
输出: "213"

示例 2:

输入: n = 4, k = 9
输出: "2314"

二、解题思路

1.从高位到低位依次进行确定。

2.每次循环得到低一位的阶乘,然后用k除以这个低一位的阶乘得到高位,然后k-高位*低一位的阶乘得到低一位的k,如此循环。

3.每找到一个高位则将其加入到res中,同时candidate里要删除掉这个被选的高位。

三、代码

[code]import math

class Solution:
def getPermutation(self, n: int, k: int) -> str:
ans = ''

def jiecheng(n):
if n <= 1:
return 1
else:
return n * jiecheng(n - 1)

candidate = list(range(1, n + 1))
res = []

while candidate:
low_jiecheng = jiecheng(len(candidate) - 1)
high_index = math.ceil(k / low_jiecheng) - 1
high_num = candidate[high_index]
res.append(high_num)
candidate.remove(high_num)
k = k - high_index * low_jiecheng
ans = ''
for i in range(len(res)):
ans += str(res)

return ans

if __name__ == '__main__':
n = 3
k = 3
s = Solution()
ans = s.getPermutation(n, k)
print(ans)
悲恋花丶无心之人 CSDN认证博客专家 [i] TensorFlow 深度学习 神经网络 计算机视觉在读研究生,熟悉Pytorch,MXNet,TensorFlow,Keras等深度学习框架,主要涉及的领域有目标检测,语义分割,超分辨率重建,行人重识别等。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: