思路:
1、将数字各位取成一个整数数组
2、从高位遍历,从当前为的所有低位取出最大的位,且下标最低。
3、如果当前的高位,和低位最大的位比较,如果高位小就交换。
然后将结果再转换成数字。
实现:
int data = 326579897;
int tmp = data;
List<Integer> dataList = new ArrayList<>();
int ws = 10;
while (tmp / ws != 0) {
dataList.add((data % ws) / (ws / 10));
ws *= 10;
}
dataList.add((data % ws) / (ws / 10));
int length = dataList.size();
Integer tmpData;
for (int i = length - 1; i >= 0; i--) {
Integer current = dataList.get(i);
Integer max = dataList.get(0);
int wz = 0;
for (int j = 0; j < i; j++) {
if (dataList.get(j) > max) {
max = dataList.get(j);
wz = j;
}
}
if (max > current) {
tmpData = dataList.get(wz);
dataList.set(wz, dataList.get(i));
dataList.set(i, tmpData);
break;
}
}
int result = 0;
int step = 1;
for (int i = 0; i < length; i++) {
result += dataList.get(i) * step;
step *= 10;
}
System.out.println(result);
抽取一下方法:
import java.util.ArrayList;
import java.util.List;
public class InegerMax {
public static void main(String[] args) {
int data = 326579897;
List<Integer> dataList = numToList(data);
int length = dataList.size();
Integer tmpData;
for (int i = length - 1; i >= 0; i--) {
Integer current = dataList.get(i);
int wz = findMaxLowDigit(dataList, i);
Integer max = dataList.get(wz);
//交换
if (max > current) {
tmpData = dataList.get(wz);
dataList.set(wz, dataList.get(i));
dataList.set(i, tmpData);
break;
}
}
Integer result = getResult(dataList);
System.out.println(result);
}
/**
* 获取结果
* @param dataList
* @return
*/
private static Integer getResult(List<Integer> dataList) {
int result = 0;
int step = 1;
for (int i = 0; i < dataList.size(); i++) {
result += dataList.get(i) * step;
step *= 10;
}
return result;
}
/**
* 找出低位最大数字的位
* @param dataList
* @param i 当前的高位
* @return
*/
private static int findMaxLowDigit(List<Integer> dataList, int i) {
Integer max = dataList.get(0);
int wz = 0;
for (int j = 0; j < i; j++) {
if (dataList.get(j) > max) {
max = dataList.get(j);
wz = j;
}
}
return wz;
}
/**
* 整数转换成一个整数List
* @param num
* @return
*/
private static List<Integer> numToList(int num) {
List<Integer> dataList = new ArrayList<>();
int ws = 10;
while (num / ws != 0) {
dataList.add((num % ws) / (ws / 10));
ws *= 10;
}
dataList.add((num % ws) / (ws / 10));
return dataList;
}
/**
* 整数转换成一个整数List 这个看上去更简单点
* @param num
* @return
*/
private static List<Integer> numToList1(int num) {
List<Integer> dataList = new ArrayList<>();
int ws = 10;
int tmp = num;
while (tmp / ws != 0) {
dataList.add((tmp % ws));
tmp /= ws;
}
dataList.add((tmp % ws));
return dataList;
}
}