LC 速查

HOT 100索引 › B17 技巧 Tricks

LC 31下一个排列Next Permutation 中等

把数组原地重排成字典序的下一个更大排列;不存在时重排为最小的排列。

思路 标准四步:从右找第一个升序位置 i;再从右找第一个大于 nums[i] 的 j 交换;最后反转 i+1 到末尾。时间 O(n)。

class Solution:
    def nextPermutation(self, nums: List[int]) -> None:
        n = len(nums)
        i = n - 2
        while i >= 0 and nums[i] >= nums[i + 1]:
            i -= 1
        if i >= 0:
            j = n - 1
            while nums[j] <= nums[i]:
                j -= 1
            nums[i], nums[j] = nums[j], nums[i]
        nums[i + 1:] = reversed(nums[i + 1:])
← 上一题 颜色分类寻找重复数 下一题 →