题目描述:
实现获取 下一个排列 的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。
如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。
必须 原地 修改,只允许使用额外常数空间。
示例 1:
输入:nums = [1,2,3]
输出:[1,3,2]
示例2:
输入:nums = [3,2,1]
输出:[1,2,3]
示例3:
输入:nums = [1,1,5]
输出:[1,5,1]
示例4:
输入:nums = [1]
输出:[1]
解题思路:
class Solution:
def nextPermutation(self, nums: List[int]) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
if len(nums) <= 1:
return
target1 = -1
for idx in range(len(nums) - 1, 0, -1):
if nums[idx] <= nums[idx - 1]:
continue
else:
target1 = idx - 1
break
if target1 == -1:
nums[target1 + 1:] = nums[target1 + 1:][::-1]
return
for idx in range(len(nums) - 1, target1, -1):
if nums[idx] > nums[target1]:
nums[idx], nums[target1] = nums[target1], nums[idx]
break
nums[target1 + 1:] = nums[target1 + 1:][::-1]
算法性能: