
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]
本文解析了LeetCode上的下一排列问题,详细介绍了如何通过遍历数组,寻找可替换元素并进行排序,以生成给定数组的下一个更大排列。特别关注了算法实现中的细节处理,如元素替换和子数组排序。
614

被折叠的 条评论
为什么被折叠?



