实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。必须原地修改,只允许使用额外常数空间。
例如:[1,2,7,4,3,1]->[1,3,1,2,4,7]
来源:力扣(LeetCode)31题
链接:https://leetcode-cn.com/problems/next-permutation
思路:
1、从后向前遍历,找到第一个nums[i] > nums[i-1],并将i位置至最后的数组升序排列
2、遍历排序后的数组从i开始至最后,找到大于nums[i-1]的并交换
3、若出现[3,2,1]这样的降序的数组,将返回其倒序
class Solution:
def nextPermutation(self, nums: List[int]) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
for i in range(len(nums)-1, 0, -1):
if nums[i] > nums[i-1]:
nums[i:] = sorted(nums[i:])
for j in range(i, len(nums)):
if nums[j] > nums[i-1]:
nums[j],nums[i-1] = nums[i-1],nums[j]
return nums
return nums.sort()