题目:

这道题的主要思路是当遇到后面的数字大于前面的数字(假设索引为i)时,就反向查找次大的数字,然后交换两个数字,并将i之后的数字按照升序进行排列。
值得注意的是,这道题要求所有更改都需要直接对输入 nums 进行更改,不允许return返回值。参考代码如下:
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
源码地址:
https://github.com/jediL/LeetCodeByPython
其它题目:[leetcode题目答案讲解汇总(Python版 持续更新)]
(https://www.jianshu.com/p/60b5241ca28e)
ps:如果您有好的建议,欢迎交流 :-D,
也欢迎访问我的个人博客 苔原带 (www.tundrazone.com)
网友评论