标签:
题目来源:
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
转载请注明出处:http://www.cnblogs.com/chruny/p/4918297.html
[LeetCode]题解(python):031-Next Permutation
标签:
原文地址:http://www.cnblogs.com/chruny/p/4918297.html