zoukankan      html  css  js  c++  java
  • 【算法题7】寻找下一个排列

    来自: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
  • 相关阅读:
    socket
    netstat
    列表
    突然发现不会写代码了
    算法资源
    bit位操作
    排序算法
    连续子数组最大和
    books
    凸优化
  • 原文地址:https://www.cnblogs.com/yanmk/p/8907272.html
Copyright © 2011-2022 走看看