美文网首页
下一个排列

下一个排列

作者: Houtasu | 来源:发表于2018-07-31 19:17 被阅读0次

实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。
如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。
必须原地修改,只允许使用额外常数空间。

以下是一些例子,输入位于左侧列,其相应输出位于右侧列。
1,2,31,3,2
3,2,11,2,3
1,1,51,5,1
解题思路:
4,6,5,3,2,1
对于上面这个例子来说,我们需要从右往左,找到第一个非升序的数字,也就是nums[i-1]<nums[i],得到i-1。这个例子是4所在的位置:0。如果没有找到非升序的数字,那就说明这是个全降序的数组,比如[3,2,1],这种直接返回反序数组就可以了。然后再次从右往左遍历,找到第一个大于4的数字,这里是5,然后把4和5换位置,变成5,6,4,3,2,1。然而这还不是结果,对于5以后的数字,需要从小到大排列。也就是5,1,2,3,4,6。这就是这个例子的答案了。
代码如下:

def nextPermutation(self, nums):
    """
    :type nums: List[int]
    :rtype: void Do not return anything, modify nums in-place instead.
    """
    down = 0
    flag = 0
    for i in range(len(nums) - 1, 0, -1):
        if nums[i - 1] < nums[i]:
            down = i - 1
            flag = 1
            break
    if not flag:
        nums.reverse()
        return

    for i in range(len(nums) - 1, 0, -1):
        if nums[i] > nums[down]:
            nums[i], nums[down] = nums[down], nums[i]
            last = nums[down + 1:]
            last.reverse()
            nums[down + 1:] = last
            return

相关文章

  • 下一个排列

    实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。如果不存在下一个更大的排列,则...

  • 全排列系列总结

    一. 找到下一个全排列 这是给定一个排列,找它的下一个全排列 给出一个数字排列中按字典序排列的下一个更大的排列。如...

  • LeetCode 31. 下一个排列 | Python

    31. 下一个排列 题目 实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。 如...

  • 31. 下一个排列

    31. 下一个排列 实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。 如果不存...

  • 31-下一个排列

    下一个排列 题目 实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。 如果不存在...

  • LeetCode每日一题: 31. 下一个排列

    31. 下一个排列 实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。如果不存在...

  • 31. 下一个排列

    实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。如果不存在下一个更大的排列,则...

  • 下一个排列

    实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。 如果不存在下一个更大的排列,...

  • 【LeetCode】排列问题

    31.下一个排列 实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。如果不存在下...

  • leetcode 031. 下一个排列

    实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。 如果不存在下一个更大的排列,...

网友评论

      本文标题:下一个排列

      本文链接:https://www.haomeiwen.com/subject/bstkvftx.html