Leetcode31-下一个排列
思路:先从后往前遍历,得到最靠右的一组升序组【nums[left], nums[left+1]】
代码:
特殊情况,空列表or只有一个元素,则返回原列表。
class Solution:
def nextPermutation(self, nums: List[int]) -> None:
if len(nums) == 1:
return nums
for left in range(len(nums)-2, -1, -1):
if nums[left]<nums[left+1]:
break
for right in range(len(nums)-1, -1, -1):
if nums[left]<nums[right]:
break
if left == 0 and nums[left] == max(nums):
start = 0
end = len(nums) - 1
while start < end:
nums[start], nums[end] = nums[end], nums[start]
start += 1
end -= 1
return nums
#交换left和right的数
nums[left], nums[right] = nums[right], nums[left]
#反转left之后的列表
start = left + 1
end = len(nums) - 1
while start < end:
nums[start], nums[end] = nums[end], nums[start]
start += 1
end -= 1