跳到主要内容

31.下一个排列

链接:31.下一个排列
难度:Medium
标签:数组、双指针
简介:实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。

题解 1 - typescript

  • 编辑时间:2020-11-10
  • 执行用时:96ms
  • 内存消耗:40MB
  • 编程语言:typescript
  • 解法介绍:计算最小改动数,逆序遍历检测递增。
function nextPermutation(nums: number[]): void {
const len = nums.length;
const swap = (i1: number, i2: number) => {
const t = nums[i1];
nums[i1] = nums[i2];
nums[i2] = t;
};
const reverse = (left: number) => {
let right = len - 1;
while (left < right) {
swap(left, right);
left++;
right--;
}
};
let i = len - 2;
while (i >= 0 && nums[i] >= nums[i + 1]) {
i--;
}
if (i >= 0) {
let j = len - 1;
while (j >= 0 && nums[i] >= nums[j]) {
j--;
}
swap(i, j);
}
reverse(i + 1);
}