本题给出一个列表的数字,然后将该列表修改为以当前列表数字为基础更大的一个排列。
解题:对于给出一个没有重复数字的数,要用当前数的数字组成一个更大一点的数的方法。先举例说明好了。
1 5 6 8 7 9的更大一个数是1 5 6 8 9 7
1 5 6 8 9 7的更大一个数是1 5 6 9 7 8
1 5 6 9 7 8的更大一个数是1 5 6 9 8 7
1 5 6 9 8 7的更大一个数是1 5 7 6 8 9
总结规律:对于一个列表nums,从后往前遍历,若果遇到nums[i]>nums[i-1],则将nums[i-1]提出来和自己后面稍大自己的数进行交换,并将nums[i-1]之后的列表反转。
同理,寻找比现在数更小一点的数的方法是从后往前遍历,若遇到nums[i]<nums[i-1],则将nums[i-1]提出来和后面稍小于自己的数进行交换,并将nums[i-1]之后的列表反转。如:
1 5 6 8 7 9的更小一个数是1 5 6 7 9 8
1 5 6 7 9 8的更小一个数是 1 5 6 7 8 9
1 5 6 7 8 9就没有更小了
代码:
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]:
for j in range(len(nums)-1,i-1,-1):
if nums[j]>nums[i-1]:
t=nums[j]
nums[j]=nums[i-1]
nums[i-1]=t
nums[i:]=list(reversed(nums[i:]))
return
nums.reverse()
return