zoukankan      html  css  js  c++  java
  • LeetCode:31. 下一个排列

    1、题目描述  

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

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

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

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

    2、题解

    2.1、解法一

    class Solution:
        def nextPermutation(self, nums):
            """
            :type nums: List[int]
            :rtype: void Do not return anything, modify nums in-place instead.
            """
            n = len(nums)
            i = n-1
            left = 0
            while i > 0:
                if nums[i] > nums[i-1]:
                    left = i-1
                    break
                i -= 1
            else:
                nums.sort()
                return 
    
            right = 0
            i = left+1
            while i < n:
                if nums[i] > nums[left]:
                    right = i
                i += 1
    
            print(left,right)
            nums[left], nums[right] = nums[right], nums[left]
    
    
            print(nums)
            n2 = n-1 - left
            print(n2)
            i = 0
            while i < int(n2/2):
                nums[left +1 + i],nums[n-1-i] = nums[n-1-i], nums[left + 1 + i]
                i += 1
    

      

  • 相关阅读:
    SPI简述
    stm32和sd卡
    BKP和RTC
    Lwip与底层的接口
    关于Ad-hoc
    stm32 引脚映射 和 ADC
    GDB使用总结
    linux管道和重定向
    学习python的第四天
    学习pyton的第三天
  • 原文地址:https://www.cnblogs.com/bad-robot/p/10065061.html
Copyright © 2011-2022 走看看