[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

原文地址:https://www.cnblogs.com/chruny/p/4918297.html