标签:ever www 最大 and oid block 开始 解题思路 hang
给定一个若干整数的排列,给出按正数大小进行字典序从小到大排序后的下一个排列。
如果没有下一个排列,则输出字典序最小的序列。
样例
左边是原始排列,右边是对应的下一个排列。
1,2,3
→1,3,2
3,2,1
→1,2,3
1,1,5
→1,5,1
class Solution: # @param nums: a list of integer # @return: return nothing (void), do not return anything, modify nums in-place instead def nextPermutation(self, nums): # write your code here change_index = -1 # 找到需要变换的比后一个数字小的数 for i in xrange(len(nums)-1, 0, -1): if nums[i] > nums[i-1]: change_index = i-1 break if change_index == -1: nums.reverse() return nums min_nums_index = change_index+1 # 找到后面列表中比change_index元素大的最小值 for j in xrange(change_index+1, len(nums)): if(nums[j]>nums[change_index]) and (nums[min_nums_index]>nums[j]): min_nums_index = j # 交换元素 nums[change_index], nums[min_nums_index] = nums[min_nums_index], nums[change_index] # 排序后面的列表 back = sorted(nums[change_index+1:]) nums[change_index+1:] = back return nums
是上一题的逆思路,这里就直接上代码啦
class Solution: # @param num : a list of integer # @return : a list of integer def previousPermuation(self, nums): # write your code here change_index = -1 # 找到需要变换的比后一个数字大的数 for i in xrange(len(nums)-1, 0, -1): if nums[i] < nums[i-1]: change_index = i-1 break if change_index == -1: nums.reverse() return nums min_nums_index = change_index+1 # 找到后面列表中比change_index元素小的最大值 for j in xrange(change_index+1, len(nums)): if(nums[j]<nums[change_index]) and (nums[min_nums_index]<nums[j]): min_nums_index = j # 交换元素 nums[change_index], nums[min_nums_index] = nums[min_nums_index], nums[change_index] # 排序后面的列表,降序 back = sorted(nums[change_index+1:],reverse=True) nums[change_index+1:] = back return nums
标签:ever www 最大 and oid block 开始 解题思路 hang
原文地址:http://www.cnblogs.com/LiCheng-/p/6650584.html