classSolution:defnextPermutation(self, nums: List[int])->None:"""
Do not return anything, modify nums in-place instead.
"""
n =len(nums)
i,j,k = n-2,n-1,n-1# traversal from end to start and find nums[i] < nums[j]while i>=0and nums[i]>= nums[j]:
i = i -1
j = j -1if i ==-1:
nums.sort()else:while k > i:if nums[k]<= nums[i]:
k = k -1else:# swap
nums[i],nums[k]= nums[k],nums[i]break# [j:end] adjust to ascending order
nums[j:]=list(reversed(nums[j:]))
classSolution{public:voidnextPermutation(vector<int>& nums){int n = nums.size();int i = n -2, j = n -1;while(i >-1&& nums[i]>= nums[j]){--i;--j;}// traverse from end to find the first nums[i] < nums[j]if(i ==-1){sort(nums.begin(), nums.end());return;}int k = n -1;while(k > i){if(nums[k]<= nums[i]){--k;}else{int tmp = nums[k];
nums[k]= nums[i];
nums[i]= tmp;break;}}reverse(nums.begin()+i+1, nums.end());}};
下一个排列class Solution: def nextPermutation(self, nums: List[int]) -> None: """ Do not return anything, modify nums in-place instead. """ n = len(nums) i,j,k = n-2,n-1,n-1 # traversal from end to start