LeetCode31-Next Permutation In Python

本题给出一个列表的数字,然后将该列表修改为以当前列表数字为基础更大的一个排列。

解题:对于给出一个没有重复数字的数,要用当前数的数字组成一个更大一点的数的方法。先举例说明好了。

1 5 6 8 7 9的更大一个数是1 5 6 8 9 7

1 5 6 8 9 7的更大一个数是1 5 6 9 7 8

1 5 6 9 7 8的更大一个数是1 5 6 9 8 7

1 5 6 9 8 7的更大一个数是1 5 7 6 8 9

总结规律:对于一个列表nums,从后往前遍历,若果遇到nums[i]>nums[i-1],则将nums[i-1]提出来和自己后面稍大自己的数进行交换,并将nums[i-1]之后的列表反转。

同理,寻找比现在数更小一点的数的方法是从后往前遍历,若遇到nums[i]<nums[i-1],则将nums[i-1]提出来和后面稍小于自己的数进行交换,并将nums[i-1]之后的列表反转。如:

1 5 6 8 7 9的更小一个数是1 5 6 7 9 8

1 5 6 7 9 8的更小一个数是 1 5 6 7 8 9

1 5 6 7 8 9就没有更小了

代码:

class Solution:
    def nextPermutation(self, nums: List[int]) -> None:
        """
        Do not return anything, modify nums in-place instead.
        """
        for i in range(len(nums)-1,0,-1):
            if nums[i]>nums[i-1]:
                for j in range(len(nums)-1,i-1,-1):
                    if nums[j]>nums[i-1]:
                        t=nums[j]
                        nums[j]=nums[i-1]
                        nums[i-1]=t
                        nums[i:]=list(reversed(nums[i:]))
                        return
        nums.reverse()
        return

猜你喜欢

转载自blog.csdn.net/nlxxqqh1/article/details/88288527