classSolution{ publicvoidnextPermutation(int[] nums){ if (nums.length == 0 || nums.length == 1){ return; } int current = nums[nums.length-1]; int index = nums.length - 2; while(index >= 0 && nums[index] >= current){ current = nums[index]; index -= 1; } //Reverse Array directly if (index < 0){ reverseArray(nums); return; } //Find the min element but larger than current itme in subarray int min = 100000; int min_index = -1; for(int i = index+1; i <= nums.length-1; i++) { if ( nums[i] > nums[index] && nums[i] < min ) { min = nums[i]; min_index = i; } } //Swap int temp = nums[index]; nums[index] = nums[min_index]; nums[min_index] = temp; //Sor in ascending order Arrays.sort(nums, index+1, nums.length); } publicvoidreverseArray(int[] nums){ int[] temp = newint[nums.length]; for (int i = 0; i < nums.length; i++) { temp[i] = nums[nums.length-i-1]; } for (int i = 0; i < nums.length; i++) { nums[i] = temp[i]; } } }