跳过正文
  1. 科学/
  2. 计算机/
  3. 算法/
  4. Leetcode/

0031 下一个排列

Solution

from typing import List

class Solution:
    def nextPermutation(self, nums: List[int]) -> None:
        n = len(nums)
        i = next((i for i in range(n - 2, -1, -1) if nums[i] < nums[i + 1]), -1)
        if ~i:
            j = next((j for j in range(n - 1, i, -1) if nums[j] > nums[i]))
            nums[i], nums[j] = nums[j], nums[i]
        nums[i + 1 :] = nums[i + 1 :][::-1]

if __name__ == "__main__":
    sol = Solution()
    arr1 = [1,2,3]
    sol.nextPermutation(arr1)
    print(arr1)     # [1,3,2]

    arr2 = [3,2,1]
    sol.nextPermutation(arr2)
    print(arr2)     # [1,2,3]

    arr3 = [1,1,5]
    sol.nextPermutation(arr3)
    print(arr3)     # [1,5,1]

    arr4 = [1,3,2]
    sol.nextPermutation(arr4)
    print(arr4)     # [2,1,3]

按位取反 ~i = -(i + 1)