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 时, 所有排列如下:

  1. "123"
  2. "132"
  3. "213"
  4. "231"
  5. "312"
  6. "321"

给定 nk,返回第 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. 排列序列的主要内容,如果未能解决你的问题,请参考以下文章

Python描述 LeetCode 46. 全排列

Python描述 LeetCode 31. 下一个排列

LeetCode 60. 排列序列

Python描述 LeetCode 47. 全排列 II

Leetcode练习(Python):数组类:第31题:实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。 如果不存在下一个更大的排列,则将数字重新排列成最小的排列

LeetCode 31. 下一个排列 | Python