题目描述
解题思路
一开始看到这个题目的时候,很懵,理解不了。直接发给我的助手,给我解释了一遍题目的意思,竟然给我输出了答案。我看了解题死理,发现是这么回事。其实看解题思路更能理解这个题目想要表达的意思。首先,逆序找第一个不按照升序排列的数字,记为i,然后从逆序寻找第一个比i所在位置大的下标即为j,交换两个下标对应的元素。然后,从第i+1个位置直至列表的最后,进行元素的交换。完成排列的寻找。
解题代码
class Solution:
def nextPermutation(self, nums: List[int]) -> None:
#讲真的,这个确实有点抽象。
i = len(nums)-2
while i>=0 and nums[i]>=nums[i+1]:
i-=1
if i>=0:
j=len(nums)-1
while j>=0 and nums[j]<=nums[i]:
j-=1
nums[i],nums[j]=nums[j],nums[i]
left,right=i+1,len(nums)-1
while left<right:
nums[left],nums[right]=nums[right],nums[left]
left+=1
right-=1