Skip to content

Commit 79118d1

Browse files
committed
feat: 31. Next Permutation
1 parent 7b080a4 commit 79118d1

File tree

1 file changed

+25
-0
lines changed

1 file changed

+25
-0
lines changed
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
/**
2+
* @param {number[]} nums
3+
* @return {void} Do not return anything, modify nums in-place instead.
4+
197 3 8642
5+
197 4 2368
6+
*/
7+
const nextPermutation = function (nums) {
8+
const n = nums.length
9+
let i = n - 1
10+
while (i > 0 && nums[i] <= nums[i - 1]) {
11+
i--
12+
}
13+
// 特殊情况,321,直接反转
14+
if (i === 0) return nums.reverse()
15+
// nums[i] > nums[i-1]
16+
i--
17+
let j = n - 1
18+
while (nums[j] <= nums[i]) j--
19+
[nums[j], nums[i]] = [nums[i], nums[j]]
20+
// reverse
21+
for (let k1 = i + 1, k2 = n - 1; k1 < k2; k1++, k2--) {
22+
[nums[k1], nums[k2]] = [nums[k2], nums[k1]]
23+
}
24+
return nums
25+
}

0 commit comments

Comments
 (0)