class Solution:
def nextPermutation(self, nums: List[int]) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
if len(nums) == 1:
return
# 从右开始,寻找第一个严格升序对
ni_s = len(nums) - 2
ni_e = len(nums) - 1
while ni_s >= 0 and nums[ni_s] >= nums[ni_e]:
ni_s -= 1
ni_e -= 1
# print(ni_s, ni_e)
# 找到了升序对
if ni_s >= 0:
k = len(nums) - 1
# 寻找右边第一个比start位置大的数
for i in range(len(nums) - 1, ni_s, -1):
if nums[ni_s] < nums[i]:
k = i
break
# print(k)
nums[ni_s], nums[k] = nums[k], nums[ni_s]
# 反转end之后的为正序
r = len(nums) - 1
while (ni_e < r):
nums[ni_e], nums[r] = nums[r], nums[ni_e]
ni_e += 1
r -= 1