Python描述 LeetCode 60. 排列序列
Posted 亓官劼
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python描述 LeetCode 60. 排列序列相关的知识,希望对你有一定的参考价值。
Python描述 LeetCode 60. 排列序列
大家好,我是亓官劼(qí guān jié ),在【亓官劼】公众号、CSDN、GitHub、B站等平台分享一些技术博文,主要包括前端开发、python后端开发、小程序开发、数据结构与算法、docker、Linux常用运维、NLP等相关技术博文,时光荏苒,未来可期,加油~
如果喜欢博主的文章可以关注博主的个人公众号【亓官劼】(qí guān jié),里面的文章更全更新更快。如果有需要找博主的话可以在公众号后台留言,我会尽快回复消息.
本文原创为【亓官劼】(qí guān jié ),请大家支持原创,部分平台一直在恶意盗取博主的文章!!! 全部文章请关注微信公众号【亓官劼】。
题目
给出集合 [1,2,3,...,n]
,其所有元素共有 n!
种排列。
按大小顺序列出所有排列情况,并一一标记,当 n = 3
时, 所有排列如下:
"123"
"132"
"213"
"231"
"312"
"321"
给定 n
和 k
,返回第 k
个排列。
示例 1:
输入:n = 3, k = 3
输出:"213"
示例 2:
输入:n = 4, k = 9
输出:"2314"
示例 3:
输入:n = 3, k = 1
输出:"123"
提示:
1 <= n <= 9
1 <= k <= n!
Python描述
从第一个升序排序开始,找下面第k个就好
class Solution:
def getPermutation(self, n: int, k: int) -> str:
nums = [i for i in range(1,n+1)]
# 找下一个排序
def nextPermutation(nums: List[int]) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
n = len(nums)
if n == 1:
return nums
# 找第一个升序
idx = n - 2
while idx >= 0:
if nums[idx] < nums[idx + 1]:
break
idx -= 1
# 找第一个比升序前小的数字位置
idy = n - 1
while idy >= 0:
if nums[idy] > nums[idx]:
break
idy -= 1
if idx == -1:
idy = n-1
nums[idx], nums[idy] = nums[idy], nums[idx]
# 逆序nums[idx+1:]
i = idx + 1
j = n - 1
while i < j:
nums[i],nums[j] = nums[j],nums[i]
i += 1
j -= 1
for i in range(k-1):
nextPermutation(nums)
return ''.join([str(_) for _ in nums])
以上是关于Python描述 LeetCode 60. 排列序列的主要内容,如果未能解决你的问题,请参考以下文章
Leetcode练习(Python):数组类:第31题:实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。 如果不存在下一个更大的排列,则将数字重新排列成最小的排列