码迷,mamicode.com
首页 > 编程语言 > 详细

【算法题7】寻找下一个排列

时间:2018-04-22 16:06:52      阅读:194      评论:0      收藏:0      [点我收藏+]

标签:例子   .com   image   代码   alt   target   sel   ike   一个   

来自:LeetCode 37

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

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

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

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

解决方案:

技术分享图片

参见博客:Next lexicographical permutation algorithm

代码如下:

 1 class Solution:
 2     def nextPermutation(self, nums):
 3         """
 4         :type nums: List[int]
 5         :rtype: void Do not return anything, modify nums in-place instead.
 6         """
 7         right=len(nums)-1
 8         while nums[right]<=nums[right-1] and right-1>=0:
 9             right -=1
10         if right==0:
11             return self.reverse(nums,0,len(nums)-1)
12         
13         privot=right-1
14         
15         successor=0
16         for i in range(len(nums)-1,privot,-1):
17             if nums[i]>nums[privot]:
18                 successor=i
19                 break
20         nums[privot],nums[successor]=nums[successor],nums[privot]
21         self.reverse(nums,privot+1,len(nums)-1)
22         return nums
23 
24     def reverse(self,nums,l,r):
25         while l<r:
26             nums[l],nums[r]=nums[r],nums[l]
27             l+=1
28             r-=1

 

【算法题7】寻找下一个排列

标签:例子   .com   image   代码   alt   target   sel   ike   一个   

原文地址:https://www.cnblogs.com/yanmk/p/8907272.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!