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

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

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

以下是一些例子,输入位于左侧列,其相应输出位于右侧列。
1,2,3 → 1,3,2
3,2,1 → 1,2,3
1,1,5 → 1,5,1

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/next-permutation

思路想清楚就很简单了,从右往左扫,遇到降序的,就说明,右边的十个最大排序,所以找到右边比这个大的里面最小的,替换,然后右边最小排序

class Solution:
    def nextPermutation(self, nums) -> None:
        """
        Do not return anything, modify nums in-place instead.
        """
        change = False
        for i in range(len(nums)-1,0,-1):
            if nums[i]>nums[i-1]:
                tmp = nums[i-1]
                max_min = min([i for i in nums[i:] if i >tmp])
                index = nums.index(max_min,i)
                nums[i-1] = max_min
                nums[index] = tmp
                nums[i:] = sorted(nums[i:])
                change = True
                break
        if not change:
            nums = sorted(nums)
        return nums
s = Solution()
print(s.nextPermutation([3,2,1]))
12-26 12:31
查看更多