31. Next Permutation (python)

来源:互联网 发布:刷帮豆软件 编辑:程序博客网 时间:2024/06/05 21:12

Implement next permutation, which rearranges numbers into the lexicographically next greater permutation of numbers.
If such arrangement is not possible, it must rearrange it as the lowest possible order (ie, sorted in ascending order).
The replacement must be in-pla
ce, do not allocate extra memory.
Here are some examples. Inputs are in the left-hand column and its corresponding outputs are in the right-hand column.
1,2,3 → 1,3,2
3,2,1 → 1,2,3
1,1,5 → 1,5,1
题意:下一个排列(字典的排序方法)
数学的排列组合问题,将排列中的数字重新排列成字典序中的下一个更大的排列。如果这样的重新排列是不可能的,它必须重新排列为可能的最低顺序(即升序排序)。重排必须在原地,不分配额外的内存。
eg:123-132-213-231-312-321(将123进行排列组合,保证下一个比前一个大,”下一个函数”需要输入排列组合,输出下一个)
思路:1)由于下一个数比上一个数大,因此需要从后往前扫描,找到递增的位置设为元素i,j(i小于j)
2)由于下一个数虽然大于上一个数,且最接近上一个数,因此找到元素i,在i元素后面找到最接近i且大于i的元素k。由于i后面的元素都是降序排列的,只需要从后往前扫描找到第一个比i大的元素即可
3)找到将i和k交换位置,然后将k后面的元素递增排序
4)找不到,则将全部元素递增排序
Runtime: 86 ms

class Solution(object):    def nextPermutation(self, nums):        if len(nums)<=1:            return         for i in range(len(nums)-2,-1,-1):            if nums[i]<nums[i+1]:                for k in range(len(nums)-1,i,-1):                    if nums[k]>nums[i]:                        nums[i],nums[k]=nums[k],nums[i]                        nums[i+1:]=sorted(nums[i+1:])                        break                break            else:                if i==0:                    nums.sort()
0 0
原创粉丝点击