一个很经典的算法题,可能还有些缺漏,大家有时间可以看看,如果有更好的算法,大家互相分享一下。
package com.demo;
import java.util.Arrays;
public class Demo01 {
public static void main(String[] args) {
System.out.println(test2(1782));
}
// 方法
static String test2(int num) {
// 1782
String string = Integer.toString(num);
char[] charArray = string.toCharArray();
int[] newArray = new int[charArray.length];
for (int i = 0; i < charArray.length; i++) {
newArray[i] = Integer.parseInt(String.valueOf(charArray[i]));
}
// 倒叙查找置换的边界
int index = find(charArray);
if (index == -1) {
return "不存在";
}
int[] reorder = reorder(newArray, index);
return Arrays.toString(reorder);
}
static int find(char[] arr) {
for (int i = arr.length - 1; i > 0; i--) {
if (arr[i] > arr[i - 1]) {
return i;
}
}
return -1;
}// 1872
static int[] reorder(int[] arr, int index) {
int left = arr[index - 1];
for (int i = arr.length - 1; i >= index; i--) {
int right = arr[i];
if (left < right) {
int temp = arr[i];
arr[i] = left;
arr[index - 1] = right;
break;
}
}
for (int i = index, j = arr.length - 1; i < j; i++, j--) {
int temp = arr[j];
arr[j] = arr[i];
arr[i] = temp;
}
return arr;
}
}
本文参考https://blog.csdn.net/CloudNineN/article/details/86579081