实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。
如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。
必须原地修改,只允许使用额外常数空间。
以下是一些例子,输入位于左侧列,其相应输出位于右侧列。
1,2,3 → 1,3,2
3,2,1 → 1,2,3
1,1,5 → 1,5,1
代码:
import com.sun.org.apache.bcel.internal.generic.SWAP;
/**
* @author Janson
* @version 1.0
* @date 2020/5/27 14:56
*/
public class NextPermute {
public void nPermute(int[] nums){
/*if(nums.length<2){
System.out.println("the nums has no next permution");
return;
}*/
int i = nums.length-2;
while(i>=0 && nums[i+1]<nums[i]){
i--;
}
if(i>=0){
int j = nums.length-1;
while (j>=0 && nums[i]>nums[j]){
j--;
}
swap(nums,i,j);
}
reserve(nums,i+1);
for (int k=0;k<nums.length;k++){
System.out.print (nums[k]);
}
}
private void reserve(int[] nums,int start){
int i = start;
int j = nums.length - 1;
while (i<j){
swap(nums,i,j);
j--;
i++;
}
}
private void swap(int[] nums, int i, int j) {
int tem = 0;
tem = nums[i];
nums[i] = nums[j];
nums[j] = tem;
}
}


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



