• LeetCode 31. 下一个排列


    31. 下一个排列

    Difficulty: 中等

    实现获取 下一个排列 的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。

    如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。

    必须修改,只允许使用额外常数空间。

    示例 1:

    输入:nums = [1,2,3]
    输出:[1,3,2]
    

    示例 2:

    输入:nums = [3,2,1]
    输出:[1,2,3]
    

    示例 3:

    输入:nums = [1,1,5]
    输出:[1,5,1]
    

    示例 4:

    输入:nums = [1]
    输出:[1]
    

    提示:

    • 1 <= nums.length <= 100
    • 0 <= nums[i] <= 100

    Solution

    class Solution:
        def nextPermutation(self, nums: List[int]) -> None:
            """
            Do not return anything, modify nums in-place instead.
            """
            i = j = len(nums) - 1
            while i > 0 and nums[i-1] >= nums[i]:
                i -= 1
            if i == 0: # 说明数字序列是倒序的
                nums.reverse()
                return
            k = i - 1
            while nums[j] <= nums[k]: # 在数组下标k~j之间找到第一个比下标k大的下标j并交换
                j -= 1
            nums[j], nums[k] = nums[k], nums[j]
            
            # 数组剩下的部分做反转处理(因为早就是降序的了),“最小化”
            l, r = k + 1, len(nums) - 1
            while l < r:
                nums[l], nums[r] = nums[r], nums[l]
                l += 1
                r -= 1
    
  • 相关阅读:
    win10 L2TP拨号
    Esxi直通板载Sata
    Esxi 增加网卡驱动 生成ISO
    IPMITOOL THRESHOLD 修改
    Reverse Engineering Supermicro IPMI
    Esxi通过RDM直通硬盘
    Centos 安装后优化
    Centos 6安装apache 2.4
    Try Catch Finally 中Finally的代码在什么时候不被执行
    用CutePDF AND GhostScript 生成PDF的处理流
  • 原文地址:https://www.cnblogs.com/swordspoet/p/14383066.html
Copyright © 2020-2023  润新知