Table of Content
题目:
这道题的主要思路是当遇到后面的数字大于前面的数字(假设索引为i)时,就反向查找次大的数字,然后交换两个数字,并将i之后的数字按照升序进行排列。
值得注意的是,这道题要求所有更改都需要直接对输入 nums 进行更改,不允许return返回值。参考代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
class Solution: def nextPermutation(self, nums): """ :type nums: List[int] :rtype: void Do not return anything, modify nums in-place instead. """ numr = sorted(nums, reverse=True) # such arrangement is not possible if numr == nums: nums.reverse() elif len(nums) != 0 and numr != nums: j = len(nums) - 1 while j > 0: i = j - 1 if nums[j] > nums[i]: # look backward for min num which greater than nums[i] k = j swap = j while k < len(nums): if nums[i] < nums[k]: if nums[k] < nums[j]: swap = k k = k + 1 temp = nums[i] nums[i] = nums[swap] nums[swap] = temp # sorted in ascending order nums[i + 1:] = sorted(nums[i + 1:]) break else: j = j - 1 |
如果您有好的建议,欢迎来信与我交流

也欢迎关注微信公众号“苔原带”

