Next Permutation LeetCode solution in JavaScript

1
/**
2
* @param {number[]} nums
3
* @return {void} Do not return anything, modify nums in-place instead.
4
*/
5
var nextPermutation = function (nums) {
6
const dsc = nums.slice();
7
dsc.sort((a, b) => b - a);
8
if (dsc.every((n, i) => n === nums[i])) {
9
nums.sort((a, b) => a - b);
10
} else {
11
const len = nums.length;
12
let lo = len - 1,
13
hi;
14
while (nums[lo] === dsc[dsc.length - 1]) {
15
lo--;
16
dsc.pop();
17
}
18
while (lo >= 0) {
19
// console.log(lo, nums[lo], nums.slice(lo + 1))
20
hi = nums
21
.slice(lo + 1)
22
.reverse()
23
.findIndex((n) => n > nums[lo]);
24
if (hi !== -1) {
25
hi = len - 1 - hi;
26
break;
27
}
28
lo--;
29
}
30

31
const lval = nums[lo];
32
// console.log(lo, lval, hi, nums[hi]);
33
nums[lo] = nums[hi];
34
nums[hi] = lval;
35
const sorted = nums.slice(lo + 1);
36
// console.log(nums, sorted)
37
sorted.sort((a, b) => a - b);
38
for (let i = 0; i < sorted.length; i++) nums[lo + 1 + i] = sorted[i];
39
}
40
};

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0