给定一个非负整数,你至多可以交换一次数字中的任意两位。返回你能得到的最大值。
示例 1 :
输入: 2736
输出: 7236
解释: 交换数字2和数字7。
示例 2 :
输入: 9973
输出: 9973
解释: 不需要交换。
注意:
给定数字的范围是 [0, 108]
public int maximumSwap(int num) {
char[] chars = String.valueOf(num).toCharArray();
int i=1,n=chars.length;
for (; i < n; i++) {
//出现逆序说明前面部分可替换
if(chars[i]>chars[i-1]){
break;
}
}
int j=i,index=i;
//找尽量靠后的最大数来替换
for (; j < n; j++) {
if(chars[j]>=chars[index]){
index=j;
}
}
//在前面找比后面的最大数小的数来替换
for (j = 0; j < i&&index<n; j++) {
if (chars[j]<chars[index]){
char temp=chars[j];
chars[j]=chars[index];
chars[index]=temp;
break;
}
}
return Integer.parseInt( new String(chars));
}
func maximumSwap(num int) int {
s := []rune(strconv.Itoa(num))
i,n:=1,len(s)
for ;i< n;i++ {
if s[i]>s[i-1] {
break
}
}
j,index:=i,i
for ;j<n;j++ {
if s[j]>=s[index] {
index=j
}
}
for j=0;j<i&&index<n;j++ {
if s[j] < s[index] {
s[j], s[index] = s[index], s[j]
break
}
}
res, _:= strconv.Atoi(string(s))
return res
}