public void nextPermutation(int[] nums) { if(nums == null || nums.length == 0) return; int len = nums.length; int i, j; for(i = len - 2; i >= 0; i--){ if(nums[i] >= nums[i+1]) continue; for(j = i+1; j < len && nums[j] > nums[i]; j++); swap(nums, i, j-1); reverse(nums, i+1); return; } reverse(nums, 0); } public void swap(int[] nums, int i, int j){ int t = nums[i]; nums[i] = nums[j]; nums[j] = t; } public void reverse(int [] nums, int i){ int j = nums.length - 1; while(i < j){ swap(nums, i, j); i++; j--; } }