class Solution {
public void nextPermutation(int[] nums) {
if(nums==null || nums.length==0){
return ;
}
//先找到该换的位置
int replace=nums.length-2;
while(replace>=0){
if(nums[replace]<nums[replace+1]){
break;
}
replace--;
}
if(replace<0){
Arrays.sort(nums);
return;
}
//再找到该和前面交换的位置,应该是大于前面该交换的最小的数,replace后面的数是默认降序排好的。
int lgrIdx=replace+1;
while(lgrIdx<nums.length && nums[lgrIdx]>nums[replace]){
lgrIdx++;
}
lgrIdx--;
//两个数交换
int temp=nums[replace];
nums[replace]=nums[lgrIdx];
nums[lgrIdx]=temp;
//再将后面部分排序
Arrays.sort(nums,replace+1,nums.length);
}
}
leetcode 31 下一个排列
最新推荐文章于 2022-07-04 14:33:24 发布