给出 n 个数字组成的排列 nums
,求出按照字典顺序的下一个排列。
思路:
解决此题需要搜索三个位置,先用两个变量 i-1
和 i
从后向前搜索,直至找到满足 nums[i-1] < nums[i]
的情况;之后再用 j
从后向前搜索,直到出现 nums[j] > nums[i-1]
。之后调换 nums[i-1]
和 nums[j]
对调,再将 nums[i]
之后的所有元素倒序排列,即可得到 nextPermutation()
即下一个排列。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| class Solution(object): def nextPermutation(self, nums): """ :type nums: List[int] :rtype: void Do not return anything, modify nums in-place instead. """ l = len(nums) for i in reversed(range(l)): if nums[i - 1] < nums[i]: break if i > 0: for j in reversed(range(l)): if nums[j] > nums[i - 1]: nums[i - 1], nums[j] = nums[j], nums[i - 1] nums[i:] = nums[i:][::-1] break else: nums[:] = nums[::-1]
|