Leetcode 31. 下一个排列
本文最后更新于176 天前,其中的信息可能已经过时,如有错误请发送邮件到2446865563@qq.com

1.题目基本信息

1.1.题目描述

整数数组的一个 排列 就是将其所有成员以序列或线性顺序排列。

  • 例如,arr = [1,2,3] ,以下这些都可以视作 arr 的排列:[1,2,3]、[1,3,2]、[3,1,2]、[2,3,1] 。

整数数组的 下一个排列 是指其整数的下一个字典序更大的排列。更正式地,如果数组的所有排列根据其字典顺序从小到大排列在一个容器中,那么数组的 下一个排列 就是在这个有序容器中排在它后面的那个排列。如果不存在下一个更大的排列,那么这个数组必须重排为字典序最小的排列(即,其元素按升序排列)。

  • 例如,arr = [1,2,3] 的下一个排列是 [1,3,2] 。

  • 类似地,arr = [2,3,1] 的下一个排列是 [3,1,2] 。

  • 而 arr = [3,2,1] 的下一个排列是 [1,2,3] ,因为 [3,2,1] 不存在一个字典序更大的排列。

给你一个整数数组 nums ,找出 nums 的下一个排列。

必须 原地 修改,只允许使用额外常数空间。

1.2.题目地址

https://leetcode.cn/problems/next-permutation/description/

2.解题方法

2.1.解题思路

特殊技巧。按照下面的四步,从后面找到一个最小的比nums[i]大的元素将其进行替换,然后再让i后面的排列尽可能小,就找到了nums的下一个排列了

2.2.解题步骤

第一步,从后往前找到第一个i使nums[i]<nums[i+1]

第二步,从后往前找到第一个j是nums[j]>nums[i]

第三步,交换nums[i]和nums[j]的值

第四步,将nums[i+1:]的数组进行升序排列(由于nums[j+1:]此时是非严格递减的,所以直接翻转即可)

3.解题代码

python3代码

class Solution:
    def nextPermutation(self, nums: List[int]) -> None:
        """
        Do not return anything, modify nums in-place instead.
        """
        # 思路:特殊技巧。按照下面的四步,从后面找到一个最小的比nums[i]大的元素将其进行替换,然后再让i后面的排列尽可能小,就找到了nums的下一个排列了
        n = len(nums)
        # 第一步,从后往前找到第一个i使nums[i]<nums[i+1]
        i = n - 2
        while i >= 0:
            if nums[i] < nums[i + 1]:
                break
            i -= 1
        # 第二步,从后往前找到第一个j是nums[j]>nums[i]
        j = n - 1
        while j >= 0:
            if nums[j] > nums[i]:
                break
            j -= 1
        # 第三步,交换nums[i]和nums[j]的值
        if i >= 0:
            nums[i], nums[j] = nums[j], nums[i]
        # 第四步,将nums[i+1:]的数组进行升序排列(由于nums[j+1:]此时是非严格递减的,所以直接翻转即可)
        l, r = i + 1, n - 1
        while l < r:
             nums[l], nums[r] = nums[r], nums[l]
             l += 1
             r -= 1

4.执行结果

觉得有帮助可以投喂下博主哦~感谢!

作者:geek007

转载请注明文章地址及作者哦~
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇