ID:31.下一个排列

52 阅读1分钟

题目链接

思路

摘自下一个排列算法详解:思路+推导+步骤,看不懂算我输! image.png

var nextPermutation = function (nums) {
  const len = nums.length;
  if (len <= 1) return nums;
  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--;
    }
    [nums[i], nums[j]] = [nums[j], nums[i]];
  }
  let left = i + 1,
    right = len - 1;
  while (left < right) {
    [nums[left], nums[right]] = [nums[right], nums[left]];
    left++;
    right--;
  }
  return nums;
};