题目:
670. 最大交换
给定一个非负整数,你至多可以交换一次数字中的任意两位。返回你能得到的最大值。
示例 1 :
输入: 2736 输出: 7236 解释: 交换数字2和数字7。
示例 2 :
输入: 9973 输出: 9973 解释: 不需要交换。
注意:
- 给定数字的范围是 [0, 108]
解答:
将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)); }
}