题目描述
https://leetcode-cn.com/problems/next-permutation/
思路题解
这个题唯一的难点在于理解题目意思。
然后就是两边扫描+一次翻转。
时间 O(n) 空间O(1)
class Solution:
def nextPermutation(self, nums: List[int]) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
def rever(a,i,j):
while i<j:
a[i],a[j]=a[j],a[i]
i+=1
j-=1
# 双指针
i,j=len(nums)-1,len(nums)-1
while j>0:
j-=1
if nums[j]>=nums[i]:
i-=1
else:
#寻找刚好大于nums[j]的数的index
p=len(nums)-1
while p>j and nums[j]>=nums[p] :
p-=1
nums[j],nums[p]=nums[p],nums[j]
rever(nums,i,len(nums)-1)
return
rever(nums,0,len(nums)-1)
return