leetcode_31. 下一个排列

leetcode_31. 下一个排列

  • 题目
  • 思路分析
  • 代码展示

题目

leetcode题目链接

思路分析

题目要求:求比当前排序大的排序(最接近)
举例
(1)13156-》13165
(2)13152-》13215
(3)24321-》31224

代码展示

class Solution:
    def nextPermutation(self, nums: List[int]) -> None:
        """
        Do not return anything, modify nums in-place instead.
        """
        numslen = len(nums)
        i = numslen-1
        #找到第一个当前元素比前面的元素要大的下标
        while i>0:
            if nums[i]<=nums[i-1]:
                i-=1
            #不能一直循环,需要退出
            else:
                break
        # print(i,"i")
        #如果当前排序就是最大的,返回最小排序
        if i ==0:
            nums.sort()

        else:
            #从后往前找第一个大于nums[i-1]的值
            j = numslen-1
            while True:
                if nums[j]>nums[i-1]:
                    break
                j-=1
            #交换
            t = nums[i-1]
            nums[i-1] = nums[j]
            nums[j] = t
            #排序
            temp2 = nums[i:]
            temp2.sort()
            nums[i:] = temp2
            

你可能感兴趣的:(LeetCode)