1 public class Solution { 2 public void nextPermutation(int[] num) { 3 // Note: The Solution object is instantiated only once and is reused by each test case. 4 int length = num.length; 5 int index = - 1; 6 for(int i = length - 1; i >= 1; i--){ 7 if(num[i] > num[i - 1]){ 8 index = i; 9 break; 10 } 11 } 12 13 if(index == -1){ 14 reverseArray(num, 0, length - 1); 15 } else { 16 int biggerIndex = findBig(num[index - 1], index, num); 17 swap(num, biggerIndex, index - 1); 18 reverseArray(num, index, length - 1); 19 } 20 } 21 22 public int findBig(int sentinal, int index, int[] num){ 23 int bigIndex = index; 24 int bigValue = num[index]; 25 for(int i = index + 1; i < num.length; i++){ 26 if(num[i] > num[index - 1] && num[i] <= bigValue){ 27 bigValue = num[i]; 28 bigIndex = i; 29 } 30 } 31 return bigIndex; 32 } 33 34 public void reverseArray(int[] num, int start, int end){ 35 while(start < end){ 36 swap(num, start, end); 37 start ++; 38 end --; 39 } 40 } 41 42 public void swap(int[] num, int start, int end){ 43 int tmp = num[start]; 44 num[start] = num[end]; 45 num[end] = tmp; 46 } 47 }