下一个全排列

实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。

如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。

必须原地修改,只允许使用额外常数空间。

以下是一些例子,输入位于左侧列,其相应输出位于右侧列。
1,2,3 → 1,3,2
3,2,1 → 1,2,3
1,1,5 → 1,5,1

思路,从右边找出第一个非递增序列,然后交换成递增序列,再去取前面下标值前一个数字交换就好了。

举例子:1254321

找出后面的递增序列,54321,显然这是一个最大的排列,所以下一个排列应当从这里开始,下一个排列应该变成最小的12345,然后找5前面的第一个数字,2,从12345中找到第一个比2大的数字3

交换3和2得出下一个排列1312245

 

posted @ 2019-03-14 20:33  zzas12345  阅读(317)  评论(0编辑  收藏  举报