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
旋转一个整数的两位数字 得到一个最大的数字
2736-> 7236
9973
思路: 从左找一个最小的数字, index越靠左越好, 之后找一个最大的数字, 在保证是最大的数字的前提下, 越靠右越好。
所有我们建立一张hash表 , key 是 0,1,2,3,4,5,6,7,8,9。 value 是出现的index ,重复的情况下更新index ,这样我们就可以尽可能从右面得到这个最大的数字
之后从左往右扫, 找到最大的数并且index在左指针右面, 交换这两个数返回即可
// // 2 7 3 6
// 1 2 3 4 5 6 7 8 9
// 1
public int maximumSwap(int num) {
String s=String.valueOf(num);
char[] array=s.toCharArray();
int[] last=new int[10];
for(int i=0;i<s.length();i++){
last[s.charAt(i)-'0']=i;
}
for(int i=0;i<array.length;i++){
for(int d=9;d>array[i]-'0';d--){
if(last[d]>i){
char tmp=array[i];
array[i]=array[last[d]];
array[last[d]]=tmp;
return Integer.valueOf(new String(array));
}
}
}
return num;
}