leetcode 31.下一个排列(python3)44ms

题目描述:

实现获取 下一个排列 的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。
如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。
必须 原地 修改,只允许使用额外常数空间。

示例 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]

解题思路:

class Solution:
    def nextPermutation(self, nums: List[int]) -> None:
        """
        Do not return anything, modify nums in-place instead.
        """
        if len(nums) <= 1:
            return
        target1 = -1
        for idx in range(len(nums) - 1, 0, -1):
            if nums[idx] <= nums[idx - 1]:
                continue
            else:
                target1 = idx - 1
                break
        if target1 == -1:
            nums[target1 + 1:] = nums[target1 + 1:][::-1]
            return
        for idx in range(len(nums) - 1, target1, -1):
            if nums[idx] > nums[target1]:
                nums[idx], nums[target1] = nums[target1], nums[idx]
                break
        nums[target1 + 1:] = nums[target1 + 1:][::-1]

算法性能:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/lanmengyiyu/article/details/109851966