31. Next Permutation
public static void nextPermutation(int[] nums) {
if(nums.length<2){
return;
}
int i=nums.length-2;
for(;i>=0;i--){
if(nums[i]<nums[i+1]){
break;
}
}
if(i>=0){
for(int j=nums.length-1;j>i;j--){
if(nums[j]>nums[i]){
swap(i,j,nums);
break;
}
}
}
reverse(nums,i+1);
}
public static void swap(int a,int b,int[] nums){
int tmp=nums[a];
nums[a]=nums[b];
nums[b]=tmp;
}
public static void reverse(int[] nums,int start){
int left=start,right=nums.length-1;
while(left<right){
swap(left,right,nums);
left++;
right--;
}
}