1.从后往前,找到第一个比后面数字小的数;
2.从1找到的位置的后一位出发,找到后面一个比当前位置大且是后面位置中最小的数字.
- 交换12中的两个数字,从1中找到的数字,以及往前的数字不变,往后一位的开始的所有数字按从小到大排序。
def nextPermutation(self, nums):
"""
:type nums: List[int]
:rtype: None Do not return anything, modify nums in-place instead.
"""
pos = -1
n = len(nums) - 1
for i in range(n, 0, -1):
if nums[i] > nums[i-1]:
pos = i - 1
break
if pos == -1:
return sorted(nums)
else:
swapNumIdx = -1
swapNumVal = float("inf")
for j in range(pos+1, len(nums)):
if nums[j] > nums[pos] and nums[j] < swapNumVal:
swapNumIdx = j
swapNumVal = nums[j]
nums[pos], nums[swapNumIdx] = nums[swapNumIdx],nums[pos]
nums2 = sorted(nums[pos+1:])
nums = nums[:pos+1]
nums.extend(nums2)
return nums
转载于:https://www.jianshu.com/p/0adecde9c448