Leetcode每日一题
题目链接: 31. 下一个排列
难度: 中等
解题思路: 从后向前找到一个顺序对,若他们交换则说明可增大。但需要找到最小的增大,则在找到的位置后面找到第一个增大的,交换他们即可增大。交换后还要把后面的所有位置逆序,使得整个序列相对减小。
题解:
class Solution:
def nextPermutation(self, nums: List[int]) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
begin,end = -1,-1
for i in range(len(nums) - 1)[::-1]:
if nums[i] < nums[i + 1]:
begin = i
break
if begin != -1:
for i in range(len(nums))[::-1]:
if nums[i] > nums[begin]:
end = i
break
# swap
temp = nums[begin]
nums[begin] = nums[end]
nums[end] = temp
# print(begin, end)
# reverse
nums[begin + 1:] = reversed(nums[begin + 1:])