实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。
如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。
必须原地修改,只允许使用额外常数空间。
以下是一些例子,输入位于左侧列,其相应输出位于右侧列。1,2,3
→ 1,3,2
3,2,1
→ 1,2,3
1,1,5
→ 1,5,1
1 class Solution(object): 2 def nextPermutation(self, nums): 3 """ 4 :type nums: List[int] 5 :rtype: None Do not return anything, modify nums in-place instead. 6 """ 7 if len(nums)<2: 8 return 9 i = len(nums)-1 10 j = -1#两个指针,i从后往前遍历,找到前一个比目前小的位置,然后把j放在这个位置,若为升序,j还在最后-1的位置,直接反转 11 while i>0: 12 if nums[i]>nums[i-1]:#找到前一个比后一个小的位置 13 j = i-1 14 break 15 i -= 1 16 for i in range(len(nums)-1, -1, -1):#倒着遍历列表 17 if nums[i]>nums[j]: 18 nums[i], nums[j] = nums[j], nums[i] 19 nums[j+1:] = sorted(nums[j+1:])#将j以后的重新排序 20 return