给定一个非负整数,你至多可以交换一次数字中的任意两位。返回你能得到的最大值。
示例 1 :
输入: 2736
输出: 7236
解释: 交换数字2和数字7。
示例 2 :
输入: 9973
输出: 9973
解释: 不需要交换。
注意:
看到的题解,通俗易懂
class Solution {
public:
int maximumSwap(int num) {
string chars = to_string(num); // 转换成字符串
int n = chars.length();
int maxIdx = n - 1;
int* maxIndex = new int[n];
for (int i = n - 1; i >= 0; i--) {
if (chars[i] > chars[maxIdx]) {
maxIdx = i;
}
maxIndex[i] = maxIdx;
}
for (int i = 0; i < n; i++) {
if (chars[maxIndex[i]] != chars[i]) {
char temp = chars[maxIndex[i]];
chars[maxIndex[i]] = chars[i];
chars[i] = temp;
break;
}
}
return stoi(chars);
}
};
class Solution {
public int maximumSwap(int num) {
char[] chars = Integer.toString(num).toCharArray(); // 将数组转为字符串数组,方便遍历
int n = chars.length;
int maxIdx = n - 1;
int[] maxArr = new int[n]; // 记录每个数对应的最大值的索引
for(int i = n - 1;i >=0;i--){
if(chars[i] > chars[maxIdx]){
maxIdx = i;
}
maxArr[i] = maxIdx; // 将索引存入数组
}
for(int i = 0; i < n; i++){
if(chars[maxArr[i]] != chars[i]){
char temp = chars[maxArr[i]];
chars[maxArr[i]] = chars[i];
chars[i] = temp;
break;
}
}
return Integer.parseInt(new String(chars));
}
}