实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。
如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。
必须原地修改,只允许使用额外常数空间。
以下是一些例子,输入位于左侧列,其相应输出位于右侧列。
1,2,3 → 1,3,2
3,2,1 → 1,2,3
1,1,5 → 1,5,1
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/next-permutation
思路想清楚就很简单了,从右往左扫,遇到降序的,就说明,右边的十个最大排序,所以找到右边比这个大的里面最小的,替换,然后右边最小排序
class Solution:
def nextPermutation(self, nums) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
change = False
for i in range(len(nums)-1,0,-1):
if nums[i]>nums[i-1]:
tmp = nums[i-1]
max_min = min([i for i in nums[i:] if i >tmp])
index = nums.index(max_min,i)
nums[i-1] = max_min
nums[index] = tmp
nums[i:] = sorted(nums[i:])
change = True
break
if not change:
nums = sorted(nums)
return nums
s = Solution()
print(s.nextPermutation([3,2,1]))