zoukankan      html  css  js  c++  java
  • [LeetCode]题解(python):031-Next Permutation

    题目来源:

      https://leetcode.com/problems/next-permutation/


    题意分析:

      输入一个数组。输出这些数字组合的下一个比输入大的数组。如果输入的是最大的,那么输出最小的数组。比如,1,2,3输出1,3,2。而3,2,1输出1,2,3.


    题目思路:

      如果存在一个比输入的数组nums大的数组,那么必然存在nums[i] < nums[j](i < j)。比nums大的最小数组,那么从最后一个数开始比较,第一个nums[i] < nums[i + 1]的时候就将nums[i]与i + 1后面比nums[i]大的最后一个数交换,然后将“i” 以后的数排序,那么就得到了答案。


    代码(python):

      

     1 class Solution(object):
     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         size = len(nums)
     8         if size == 0 or size == 1:
     9             return
    10         i = size - 2
    11         while i >= 0:
    12             if nums[i] < nums[i + 1]:
    13                 j = i + 1
    14                 while j < size:
    15                     if nums[i] >= nums[j]:
    16                         break
    17                     j += 1
    18                 j -= 1
    19                 nums[i],nums[j] = nums[j],nums[i]
    20                 nums[i + 1:] = sorted(nums[i + 1:])
    21                 return
    22             i -= 1
    23         middle = (size - 1) // 2;k = 0
    24         while k <= middle:
    25             nums[k],nums[size - 1 - k] = nums[size - 1 -k],nums[k]
    26             k += 1
    27         return
    View Code

    转载请注明出处:http://www.cnblogs.com/chruny/p/4918297.html

  • 相关阅读:
    摆花
    关于我的博客
    博客美化更新日志
    页面美化代码1.x
    本人已转至新博客!
    回归博客园
    退役快乐
    Luogu神贴合辑
    代码高亮预览
    NOIp2018普及组初赛解题报告
  • 原文地址:https://www.cnblogs.com/chruny/p/4918297.html
Copyright © 2011-2022 走看看