本人一直在努力地积累Leetcode上用Python实现的题,并且会尽力讲清每道题的原理,绝不像其他某些博客简略地带过。
如果觉得讲的清楚,欢迎关注。
实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。
如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。
必须原地修改,只允许使用额外常数空间。
以下是一些例子,输入位于左侧列,其相应输出位于右侧列。1,2,3
→ 1,3,2
3,2,1
→ 1,2,3
1,1,5
→ 1,5,1
思路:我采用的是升序倒置法,具体:
下一个排列,其实本质上找的是下一个比当前数字大的数。当然,最后一种排列,也就是3,2,1这种找的是第一个。
123,下一个紧挨着123且稍稍大于123的数是132。也就是说我们要做一些调整,让我们当前数字增加,但同时增加幅度要最小。
本着这样的思路,当然是从后往前遍历,因为尾部的权重比较低