// 下一个排列
// 下一个总比前一个大一点
// [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--;
}
}
下一个排列
最新推荐文章于 2025-12-18 17:00:31 发布
本文介绍了如何使用Java编写一个函数`nextPermutation`,通过一系列操作(查找非倒序数、交换元素和反转部分)来生成给定整数数组的下一个排列。

2471

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



