leetcode 31.下一个排列(python)

leetcode 31.下一个排列(python)

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

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

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

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

class Solution(object):
    def nextPermutation(self, nums):
        i = j = len(nums) - 1
        # 判断nums是否是逆序
        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]:
        	j -= 1
        nums[k], nums[j] = nums[j], nums[k]
        # 翻转第二部分
        l, r = k + 1, len(nums) - 1
        while l < r:
        	nums[l], nums[r] = nums[r], nums[l]
        	l += 1
        	r -= 1
经验分享 程序员 微信小程序 职场和发展