Skip to content

Commit 5aeb5ef

Browse files
authored
Update 31-next-permutation.js
1 parent 574bc89 commit 5aeb5ef

File tree

1 file changed

+39
-0
lines changed

1 file changed

+39
-0
lines changed

31-next-permutation.js

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,3 +32,42 @@ function swap(arr, i, j) {
3232
arr[j] ^= arr[i];
3333
arr[i] ^= arr[j];
3434
}
35+
36+
// another
37+
38+
/**
39+
* @param {number[]} nums
40+
* @return {void} Do not return anything, modify nums in-place instead.
41+
*/
42+
const nextPermutation = function(nums) {
43+
const n = nums.length
44+
let start, end
45+
for(let i = n - 2; i >= 0; i--) {
46+
if(nums[i] < nums[i + 1]) {
47+
start = i
48+
break
49+
}
50+
}
51+
if(start == null) {
52+
reverse(nums, 0, n - 1)
53+
} else {
54+
for(let i = n - 1; i >= 0; i--) {
55+
if(nums[i] > nums[start]) {
56+
end = i
57+
break
58+
}
59+
}
60+
swap(nums, start, end)
61+
reverse(nums, start + 1, n - 1)
62+
}
63+
};
64+
function reverse(arr, start, end) {
65+
while(start < end) {
66+
swap(arr, start++, end--)
67+
}
68+
}
69+
function swap(arr, i, j) {
70+
const tmp = arr[i]
71+
arr[i] = arr[j]
72+
arr[j] = tmp
73+
}

0 commit comments

Comments
 (0)