1. 程式人生 > >【算法題7】尋找下一個排列

【算法題7】尋找下一個排列

baidu idt http .com break solution 博客 ext algorithm

來自:LeetCode 37

實現獲取下一個排列的函數,算法需要將給定數字序列重新排列成字典序中下一個更大的排列。

如果不存在下一個更大的排列,則將數字重新排列成最小的排列(即升序排列)。

必須原地修改,只允許使用額外常數空間。

以下是一些例子,輸入位於左側列,其相應輸出位於右側列。
1,2,31,3,2
3,2,11,2,3
1,1,51,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】尋找下一個排列