【算法題7】尋找下一個排列
阿新 • • 發佈:2018-04-22
baidu idt http .com break solution 博客 ext algorithm
來自: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 returnself.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】尋找下一個排列