自己写的方法思路上稍微复杂了些
其实可以两个for循环,nums[i]找后面数字的最大值交换
discussion里面的方法是用了一个数组buckets,稍稍降低了时间复杂度
class Solution {
public int maximumSwap(int num) {
char[] digits = Integer.toString(num).toCharArray();//把int转化成char[]
int[] buckets = new int[10];
for (int i = 0; i < digits.length; i++) {
buckets[digits[i] - '0'] = i;
}
for (int i = 0; i < digits.length; i++) {
for (int k = 9; k > digits[i] - '0'; k--) {
if (buckets[k] > i) {
char tmp = digits[i];
digits[i] = digits[buckets[k]];
digits[buckets[k]] = tmp;
return Integer.valueOf(new String(digits));//char[]转成string,再得到value
}
}
}
return num;
}
}
以上
Integer.toString(num).toCharArray()
Integer.valueOf(new String(digits))
这两个方法要记住