670. 最大交换
给定一个非负整数,你至多可以交换一次数字中的任意两位。返回你能得到的最大值。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/maximum-swap
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
public class Solution {
private void swap(char[] data, int a, int b) {
char tmp = data[a];
data[a] = data[b];
data[b] = tmp;
}
public int maximumSwap(int num) {
char[] digits = String.valueOf(num).toCharArray();
int[] last = new int[10];
for (int i = 0; i < digits.length; ++i) {
last[digits[i] - '0'] = i;
}
for (int i = 0; i < digits.length; ++i) {
for (int j = 9; j > digits[i] - '0'; --j) {
if (last[j] > i) {
swap(digits, i, last[j]);
return Integer.parseInt(String.valueOf(digits));
}
}
}
return num;
}
}
心之所向,素履以往 生如逆旅,一苇以航