美文网首页
31. Next Permutation

31. Next Permutation

作者: poteman | 来源:发表于2019-07-14 16:49 被阅读0次

思路,

  1. 从后(倒数第二位开始)往前找到第一个比后面相邻一位小的index,设置为target;
  2. 如果target==-1(数组的元素是按照从大到小排列,则直接将数组排序后输出);
  3. 从target开始往后遍历,找到和当前target大,但最接近的数字对应的index为replace;
  4. 交换target和replace的数字所在位置;
  5. 将target后面的数组从小到大排序。
    def nextPermutation(self, nums):
        """
        :type nums: List[int]
        :rtype: None Do not return anything, modify nums in-place instead.
        """
        idx = len(nums) - 2
        target = -1
        for i in range(idx, -1, -1):
            if nums[i] > nums[i + 1]:
                continue
            else:
                target = i
                break
        if target == -1:
            return sorted(nums)

        replace = len(nums) - 1
        for i in range(target + 1, len(nums)):
            if nums[i] <= nums[target]:
                replace = i - 1
                break
        nums[target], nums[replace] = nums[replace], nums[target]
        res = nums[:target + 1]
        res.extend(sorted(nums[target + 1:]))
        return res

相关文章

网友评论

      本文标题:31. Next Permutation

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