Given a non-negative integer, you could swap two digits at most once to get the maximum valued number. Return the maximum valued number you could get.
Example 1:
Input: 2736 Output: 7236 Explanation: Swap the number 2 and the number 7.
Example 2:
Input: 9973 Output: 9973 Explanation: No swap.
Note:
- The given number is in the range [0, 108]
将最大的数放在最前面,如果最前面若干位已经输最大的数了,则找次大的数,依次类推,程序如下所示:
class Solution {
public int maximumSwap(int num) {
int[] dp = new int[10];
int[] a = new int[10];
int tmp = num;
while (tmp != 0){
dp[tmp%10] ++;
tmp = tmp/10;
}
StringBuilder maxVal = new StringBuilder();
for (int i = 9; i >= 0; -- i){
while (dp[i] != 0){
maxVal.append(i);
dp[i] --;
}
}
StringBuilder sb = new StringBuilder(String.valueOf(num));
int len = maxVal.length(), j = 0;
char ch=' ';
for (int i = 0; i < len; ++ i){
if (maxVal.charAt(i) != sb.charAt(i)){
ch = maxVal.charAt(i);
j = i;
break;
}
}
for (int i = len - 1; i >= 0; -- i){
if (sb.charAt(i) == ch){
char t = sb.charAt(i);
sb.setCharAt(i, sb.charAt(j));
sb.setCharAt(j, t);
return Integer.parseInt(sb.toString());
}
}
return num;
}
}