题目
基本思路
输出字典序中的下一个排列。比如123生成的全排列是:123,132,213,231,312,321。那么321的next permutation是123。下面这种算法据说是STL中的经典算法。
举例为:14532
1. 首先从后向前找到相邻的两个升序元素,45,将partition指向4
2. 在从尾端找出另一个大于partition的数字,在与partition指向的数字进行交换
3. 然后将partition之后的数字进行逆序排列
代码
class Solution:
def nextPermutation(self, nums):
"""
:type nums: List[int]
:rtype: void Do not return anything, modify nums in-place instead.
"""
partition = -1
length = len(nums)
if length <= 1:
return nums
for i in range(length-2,-1,-1):
if nums[i] < nums[i+1]:
partition = i
break
if partition == -1:
nums = nums.reverse()
return nums
else:
for i in range(length-1,partition,-1):
if nums[i] > nums[partition]:
nums[i],nums[partition] = nums[partition],nums[i]
break
nums[partition + 1:] = nums[partition + 1:][::-1]
return nums
运行结果
emmmmm,他总是说我没有返回东西,因为我在原地进行了修改,好晕,没法改,不知道哪里有问题。。。。