给定一个非负整数,你至多可以交换一次数字中的任意两位。返回你能得到的最大值。
示例 1 :
输入: 2736
输出: 7236
解释: 交换数字2和数字7。
示例 2 :
输入: 9973
输出: 9973
解释: 不需要交换。
注意:
给定数字的范围是 [0, 10^8]
解题思路:
1、数最大有八位
2、两两交换最多交换(1 + 7)* 7 / 2 = 28次
代码:
class Solution {
public int maximumSwap(int num) {
char a[] = (num + "").toCharArray();
int len = a.length;
int maxres = num;
for(int i = 0; i < len; i ++)
for(int j = i + 1; j < len; j ++) {
swap(i, j, a);
maxres = Math.max(maxres, Integer.parseInt(new String(a)));
swap(i, j, a);
}
return maxres;
}
public void swap(int i, int j, char[]a) {
char temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}