实现获取 下一个排列 的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。
如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。
必须 原地 修改,只允许使用额外常数空间。
链接:https://leetcode-cn.com/problems/next-permutation
学习到的思路是反向对列表进行处理。
这题很需要正确的思路,官方给出的解答和图形很到位,可以移步去看
官方解答
class Solution:
def nextPermutation(self, nums: List[int]) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
mark = 1
for i in range(1, len(nums)):
if nums[-i] > nums[-i - 1]:
# small = nums[-i-1]
mark = 0
break
if mark:
nums.reverse()
return
for j in range(1, i + 1):
if nums[-j] > nums[-i - 1]:
# big = nums[-j]
nums[-i - 1], nums[-j] = nums[-j], nums[-i - 1]
nums[-i:] = reversed(nums[-i:])
break