permutation相关题目: 31. Next Permutation

1.从后往前,找到第一个比后面数字小的数;
2.从1找到的位置的后一位出发,找到后面一个比当前位置大且是后面位置中最小的数字.

  1. 交换12中的两个数字,从1中找到的数字,以及往前的数字不变,往后一位的开始的所有数字按从小到大排序。
    def nextPermutation(self, nums):
        """
        :type nums: List[int]
        :rtype: None Do not return anything, modify nums in-place instead.
        """
        pos = -1
        n = len(nums) - 1
        for i in range(n, 0, -1):
            if nums[i] > nums[i-1]:
                pos = i - 1
                break
        if pos == -1:
            return sorted(nums)
        else:
            swapNumIdx = -1
            swapNumVal = float("inf")
            for j in range(pos+1, len(nums)):
                if nums[j] > nums[pos] and nums[j] < swapNumVal:
                    swapNumIdx = j
                    swapNumVal = nums[j]
            nums[pos], nums[swapNumIdx] = nums[swapNumIdx],nums[pos]
            nums2 = sorted(nums[pos+1:])
            nums = nums[:pos+1]
            nums.extend(nums2)

        return nums

转载于:https://www.jianshu.com/p/0adecde9c448

猜你喜欢

转载自blog.csdn.net/weixin_34384915/article/details/91054507