赞
踩
这道题的意思是我们只能交换一次,需要得到最大的数字。
我们的第一个想法就是要这个数字先变成一个数组,便于我们操作。
然后把数组最大的数放到第一个位置,如果最大的数字已经在第一个位置,那么就把次大的数放到第二个位置,依次递推…
如果数字为 nums =52767,我们肯定是要把最后一个7放到第一个位置,这样才能得到最大的数字,也即 72765。所以可以采取从后向前遍历的方式,只有大于的时候才更新下标即可。
总结:
我们先把这个数字变成一个数组,然后遍历这个数组,找到每一位后面最大的数字,如果这个最大的数字有多个,我们则取靠后位置的那个数字,一旦找到就结束遍历。
class Solution { public int maximumSwap(int num) { if(num < 10) return num; char[] s = Integer.toString(num).toCharArray(); for(int i = 0;i < s.length;i ++) { int maxIndex = i; // 如果遇到多个数字,取靠后面的数字,所以采取从后向前遍历的方式 for(int j = s.length - 1;j >= i + 1;j --) { if(s[j] > s[maxIndex]) { maxIndex = j; } } // 说明 i 后面有大于 s[i] 的数字 if(maxIndex != i) { char temp = s[i]; s[i] = s[maxIndex]; s[maxIndex] = temp; return Integer.parseInt(new String(s)); } } return num; } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。