31 Next Permutation
计算下一个序列:首先对数组从右向左进行扫描,找到第一个不是递增的元素,将元素标记为p, 然后从p元素开始,向右扫描,找到比p大的最小元素,记为q, 交换p元素和q元素,然后对于p元素后续的元素进行反转,得到下一个排序。
class Solution(object):
def nextPermutation(self, nums):
"""
:type nums: List[int]
:rtype: None Do not return anything, modify nums in-place instead.
"""
if not nums or len(nums) == 1:
return
n = len(nums)
for i in range(n-1, -1, -1):
if nums[i-1] < nums[i]:
for j in range(n-1, i-1, -1):
if nums[j] > nums[i-1]:
nums[j], nums[i-1] = nums[i-1], nums[j]
nums[i:] = sorted(nums[i:])
break
break