下一个排列-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 );
}
}
本文深入讲解了LeetCode上的下一个排列算法实现,通过一个Java示例代码详细解释了如何找到当前序列的下一个字典序排列。文章首先判断当前序列是否已为最大排列,然后从后向前查找第一个升序对,接着寻找比该位置大的最小数进行交换,并对后续子数组进行排序。
647

被折叠的 条评论
为什么被折叠?



