从后往前遍历数组,找到两个连续值是升序(nums[i-1] < nums[i]),反转位置 i 到 len-1 位置的 nums 顺序,调换之后,从 i位置往后,查找第一个大于nums[i -1]的值,nums[k],进行交换
例子【1,5,3,4,6,2】 => 【1,5,3,4,2,6】 => 【1,5,3,6,2,4】
/**
* @param {number[]} nums
* @return {void} Do not return anything, modify nums in-place instead.
*/
const reverse = function(nums, left, right){
while(left <= right){
[nums[left], nums[right]] = [nums[right], nums[left]]
left++
right--
}
}
var nextPermutation = function(nums) {
let len = nums.length
for(let i = len - 1; i >= 0; i--){
if(i == 0){
return nums.sort((a, b) => a - b)
}
if(nums[i] > nums[i-1]){
reverse(nums, i, nums.length - 1)
for(let k = i; k < nums.length; k++){
if(nums[k] > nums[i-1]){
[nums[k], nums[i-1]] = [nums[i-1], nums[k]]
return nums
}
}
}
}
};