https://leetcode.com/problems/next-permutation/
思路
思路比较常见:从最后一个元素开始遍历,若前一个元素比后一个元素还小,找到比该前一元素大的元素并替换之,替换位置后面的所有数再从小到大排序
注意的细节
找到比该前一元素大的元素,对立面应该是小于等于
if j == L-1 or nums[j+1] <= nums[i-1]:
nums[j], nums[i-1] = nums[i-1], nums[j]
nums[i:] = sorted(nums[i:])
break
AC代码(beat 100% time)
class Solution(object):
def nextPermutation(self, nums):
"""
:type nums: List[int]
:rtype: None Do not return anything, modify nums in-place instead.
"""
L = len(nums)
for i in range(L-1, -1, -1):
if i>=1 and nums[i] > nums[i-1]:
for j in range(i, L):
if j == L-1 or nums[j+1] <= nums[i-1]:
nums[j], nums[i-1] = nums[i-1], nums[j]
nums[i:] = sorted(nums[i:])
break
break
if i == 0:
nums[:] = nums[::-1]