Menu
CoddyTech

Next Permutation

给你一个整数数组 nums,其中的值可能重复。设想把这些值的所有不同排列按字典序排序:从第一个不同的索引开始比较两个排列,该位置值较小的排列排在前面。返回排序后紧接在 nums 之后的排列。

如果 nums 已经是最大的排列,那么它后面没有排列了:返回最小的排列,也就是按升序排列这些值。目标是用时 O(n),额外内存用量为 O(1)。

函数

nextPermutation(nums: integer-array) → integer-array
numsinteger-array
当前的值排列方式
返回值integer-array
字典序中的下一个排列;如果 nums 已经是最大的排列,则将这些值按升序排列

约束条件

  • 1 ≤ nums.length ≤ 5000
  • 0 ≤ nums[i] ≤ 1000

示例

输入
nums = [2, 5, 4, 1]
输出
[4, 1, 2, 5]
解释
尾部的 5, 4, 1 正在下降,所以它前面的 2 必须增大。大于 2 的最小尾部值是 4;将它放到那里,其余数字按递增顺序排列:[4, 1, 2, 5]。
challenge icon

进阶

如果要找前一个排列,也就是字典序中紧挨在 nums 前面的那个排列,你会怎么做?

重置代码
def nextPermutation(nums):
    # 在这里编写代码

测试 #1

测试 #2

测试 #3

参数

nums = [2, 5, 4, 1]

预期输出

[4, 1, 2, 5]