下一个排列-java leetcode
// An highlighted block
class Solution {
public void nextPermutation(int[] nums) {
if(nums.length < 2){
return;
}
//是否已经是最大的
boolean max = true;
int i = nums.length - 2 ;
//从后往前数,找到第一个前一个数比后一个数小的
for( ;i >= 0; i -- ){
if(nums[i] < nums[ i + 1]){
max = false;
break;
}
}
//如果是最大的,则转为顺序
if(max){
Arrays.sort(nums);
return;
}
int min = i + 1;
//从变化的位置往后数,找到比i大的最小的数
for(int j = i + 2 ;j < nums.length ;j ++){
if(nums[j] < nums[min]&& nums[j] > nums[i]){
min = j;
}
}
//交换i和比i大的最小的数
int temp = nums[min];
nums[min] = nums[i];
nums[i] = temp;
Arrays.sort(nums,i+1,nums.length );
}
}