def next_permutation(self, nums: List[int]) -> List[int]:
def swap(i, j):
nums[i], nums[j] = nums[j], nums[i]
def reverse(start, end):
nums[start : end + 1] = nums[start : end + 1 : -1]
n = len(nums)
# Step 1
i = n - 2
while i >= 0 and nums[i] >= nums[i + 1]:
i -= 1
if i >= 0:
# Step 2
j = n - 1
while nums[i] >= nums[j]:
j -= 1
swap(i, j)
# Step 3
reverse(i + 1, n - 1)
return nums