public static void main(String[] args) { int[] arr = {1,3,2}; aTestW1 aTestW1 = new aTestW1(); aTestW1.nextPermutation(arr); for (int i = 0; i<arr.length;i++) { System.out.print(arr[i] + " "); } System.out.println(); } public void nextPermutation(int[] nums) { int aFlag = 2; int indexA = 0; int targetA = 0; int temp = 0; for (int i=nums.length-1;i >0;i--) { if (nums[i-1] >= nums[i]) { //10 9 8 7 6 4 上一个元素比当前元素小 aFlag = 1; } else { // 2 4 3 上一个元素比当前元素小 aFlag = 0; //此时找到 小的元素 记录下来 索引为i-1的元素比当前元素小 // 那就在这个元素后面所有元素中找出一个比这个元素大的元素 且是大中最小 indexA = i; targetA = nums[i]; break; } } if (aFlag == 0) { //要注意数组溢出 Arrays.sort(nums,indexA,nums.length); for (int i=indexA;i< nums.length;i++) { if (nums[i] > nums[indexA-1]) { temp = nums[indexA-1]; nums[indexA-1] = nums[i]; nums[i] = temp; //再将元素增序排好 Arrays.sort(nums,indexA,nums.length); break; } } } if (aFlag == 1) { Arrays.sort(nums); } }
}