原题链接
typescript
/**
Do not return anything, modify nums in-place instead.
*/
function nextPermutation(nums: number[]): void {
// 从后向前找到第一个非降的数
let i = nums.length - 2;
while(i >= 0 && nums[i] >= nums[i + 1]) {
i--;
}
// 从后向前找第一个大于nums[i]的数
if(i >= 0) {
let j = nums.length - 1;
while(j > i && nums[j] <= nums[i]) {
j--;
}
// 交换他们
[nums[i], nums[j]] = [nums[j], nums[i]];
}
// 翻转后半段数组
let p = i + 1;
let q = nums.length - 1;
while(p <= q) {
[nums[p], nums[q]] = [nums[q], nums[p]];
p++;
q--;
}
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30