File tree Expand file tree Collapse file tree 2 files changed +42
-13
lines changed Expand file tree Collapse file tree 2 files changed +42
-13
lines changed Original file line number Diff line number Diff line change @@ -8,26 +8,24 @@ public class NextPermutation {
8
8
* 然后从升序中找到一个大于nums[i-1]的最小数与i-1交换,然后对升序整体revert为降序即可
9
9
*/
10
10
public void nextPermutation (int [] nums ) {
11
- int i = nums . length - 1 ;
11
+ int i , j ;
12
12
13
- for ( ; i >= 0 ; i --) {
14
- if (i > 0 && nums [i - 1 ] < nums [i ]) {
13
+ for (i = nums . length - 1 ; i > 0 ; i --) {
14
+ if (nums [i - 1 ] < nums [i ]) {
15
15
break ;
16
16
}
17
17
}
18
18
19
- if (i < 0 ) {
20
- revert (nums , 0 , nums .length - 1 );
21
- return ;
22
- }
23
-
24
- for (int j = nums .length - 1 ; j >= i ; j --) {
25
- if (nums [j ] > nums [i - 1 ]) {
26
- swap (nums , j , i - 1 );
27
- revert (nums , i , nums .length - 1 );
28
- break ;
19
+ if (i > 0 ) {
20
+ for (j = i ; j < nums .length ; j ++) {
21
+ if (nums [j ] <= nums [i - 1 ]) {
22
+ break ;
23
+ }
29
24
}
25
+ swap (nums , i - 1 , j - 1 );
30
26
}
27
+
28
+ revert (nums , i , nums .length - 1 );
31
29
}
32
30
33
31
private void swap (int [] nums , int left , int right ) {
Original file line number Diff line number Diff line change 2
2
3
3
public class Main {
4
4
5
+ // 1 5 1
6
+ public void nextPermutation (int [] nums ) {
7
+ int i = nums .length - 1 , j ;
8
+ for (i = nums .length - 1 ; i > 0 ; i --) {
9
+ if (nums [i - 1 ] < nums [i ]) {
10
+ break ;
11
+ }
12
+ }
13
+ if (i > 0 ) {
14
+ for (j = i ; j < nums .length ; j ++) {
15
+ if (nums [j ] <= nums [i - 1 ]) {
16
+ break ;
17
+ }
18
+ }
19
+ swap (nums , i - 1 , j - 1 );
20
+ }
21
+ revert (nums , i , nums .length - 1 );
22
+ }
23
+
24
+ private void revert (int [] nums , int start , int end ) {
25
+ for ( ; start < end ; start ++, end --) {
26
+ swap (nums , start , end );
27
+ }
28
+ }
29
+
30
+ private void swap (int [] nums , int i , int j ) {
31
+ int t = nums [i ];
32
+ nums [i ] = nums [j ];
33
+ nums [j ] = t ;
34
+ }
35
+
5
36
public static void main (String [] args ) {
6
37
}
7
38
}
You can’t perform that action at this time.
0 commit comments