给定一个非负整数,你至多可以交换一次数字中的任意两位。返回你能得到的最大值。
示例 1 :
输入: 2736 输出: 7236 解释: 交换数字2和数字7。
示例 2 :
输入: 9973 输出: 9973 解释: 不需要交换。
注意:
将num转化为字符数组,然后进行遍历。外循环从i=0开始,内层循环从j=i+1开始,内层循环找到最大的数字并记录其位置,然后判单i位置的数字是否小于内层循环的最大数字,如果小于则交换并退出循环,否则继续进行遍历直到完成一次交换。
注:if(max<=c)这里一定要加等于符号,因为要使交换后的最大,所以我们找到的最大数字尽可以越远越好。
class Solution {
public int maximumSwap(int num) {
String s=Integer.toString(num);
char[] chars = s.toCharArray();
int location=0;
for(int i=0;i<s.length();i++){
char max='0';
for(int j=i+1;j<s.length();j++){
char c=chars[j];
if(max<=c){
max=c;
location=j;
}
}
if(chars[i]<max){
char temp=chars[i];
chars[i]=max;
chars[location]=temp;
break;
}
}
return Integer.valueOf(new String(chars));
}
}