File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -8,26 +8,24 @@ public class NextPermutation {
88 * 然后从升序中找到一个大于nums[i-1]的最小数与i-1交换,然后对升序整体revert为降序即可
99 */
1010 public void nextPermutation (int [] nums ) {
11- int i = nums . length - 1 ;
11+ int i , j ;
1212
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 ]) {
1515 break ;
1616 }
1717 }
1818
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+ }
2924 }
25+ swap (nums , i - 1 , j - 1 );
3026 }
27+
28+ revert (nums , i , nums .length - 1 );
3129 }
3230
3331 private void swap (int [] nums , int left , int right ) {
Original file line number Diff line number Diff line change 22
33public class Main {
44
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+
536 public static void main (String [] args ) {
637 }
738}
You can’t perform that action at this time.
0 commit comments