1、题目描述
实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。
如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。
必须原地修改,只允许使用额外常数空间。
以下是一些例子,输入位于左侧列,其相应输出位于右侧列。1,2,3 → 1,3,23,2,1 → 1,2,31,1,5 → 1,5,1
2、题解
2.1、解法一
class Solution:
def nextPermutation(self, nums):
"""
:type nums: List[int]
:rtype: void Do not return anything, modify nums in-place instead.
"""
n = len(nums)
i = n-1
left = 0
while i > 0:
if nums[i] > nums[i-1]:
left = i-1
break
i -= 1
else:
nums.sort()
return
right = 0
i = left+1
while i < n:
if nums[i] > nums[left]:
right = i
i += 1
print(left,right)
nums[left], nums[right] = nums[right], nums[left]
print(nums)
n2 = n-1 - left
print(n2)
i = 0
while i < int(n2/2):
nums[left +1 + i],nums[n-1-i] = nums[n-1-i], nums[left + 1 + i]
i += 1