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
    写在NOIP2018后
    Atcoder&CodeForces杂题11.7
    Atcoder&CodeForces杂题11.6
    [NOIP11.1模拟赛]补番报告
    [JZOJ5281]钦点题解--瞎搞+链表
    [JZOJ5280]膜法师题解--思维+前缀和
  • 原文地址:https://www.cnblogs.com/chruny/p/4918297.html
Copyright © 2011-2022 走看看