// 下一个排列
// 下一个总比前一个大一点
// [1,2,3]
// [1,3,2]
// [2,1,3]
// [2,3,1]
// [3,1,2]
// [3,2,1]
public static void nextPermutation(int[] nums){
int i=nums.length-2;
// 从后往前查找第一个i<i+1的数 2,非倒序的数
while (i>=0&&nums[i]>=nums[i+1]){
i--;
}
if(i>=0){
int j=nums.length-1;
// 在从右边找一个大于他的数交换
while (j>=0&&nums[i]>=nums[j]){
j--;
}
swap(nums,i,j);
}
// 在反转右边部分
reverse(nums,i+1);
}
//交换
private static void swap(int[] nums, int i, int j) {
int temp=nums[i];
nums[i]=nums[j];
nums[j]=temp;
}
//反转
private static void reverse(int[] nums,int start){
int left=start,right=nums.length-1;
while (left<right){
swap(nums,left,right);
left++;
right--;
}
}