2024-1-22
从后往前遍历整数的字符数组,找到第一个比当前最大值小的数字,然后将该数字与最大值进行交换。
maxIdx
为字符数组的最后一个索引,用于记录当前最大值的索引。idx1
和 idx2
为-1,用于记录需要交换的两个索引。maxIdx
。idx1
,将 maxIdx
赋值给 idx2
。swap
函数交换字符数组中 idx1
和 idx2
位置对应的字符。将字符数组转换为整数,并返回结果。public int maximumSwap(int num) {
char[] charArray = String.valueOf(num).toCharArray(); // 将整数转换为字符数组
int n = charArray.length;
int maxIdx = n - 1; // 记录当前最大值的索引,默认为最后一位
int idx1 = -1, idx2 = -1; // 记录需要交换的两个索引,默认为-1
for (int i = n - 1; i >= 0; i--) { // 从后往前遍历字符数组
if (charArray[i] > charArray[maxIdx]) { // 如果当前字符比最大值大
maxIdx = i; // 更新最大值的索引
} else if (charArray[i] < charArray[maxIdx]) { // 如果当前字符比最大值小
idx1 = i; // 记录第一个需要交换的索引
idx2 = maxIdx; // 记录第二个需要交换的索引为当前最大值的索引
}
}
if (idx1 >= 0) { // 如果存在需要交换的索引
swap(charArray, idx1, idx2); // 交换两个索引对应的字符
return Integer.parseInt(new String(charArray)); // 将字符数组转换为整数并返回
} else {
return num; // 如果不存在需要交换的索引,则返回原始整数
}
}
public void swap(char[] charArray, int i, int j) { // 交换字符数组中两个索引对应的字符
char temp = charArray[i];
charArray[i] = charArray[j];
charArray[j] = temp;
}