思路:
假设数字? 9923676
从右边找最大的数字的下标maxindex,然后向左边寻找小于最大数字的数的下标,直到找到最左边,交换两者得出新的数字,比如从左到右递减的数字如9621则不需要变化,在寻找中记录这种数字
class Solution {
public:
int maximumSwap(int num) {
//转换为字符串
string s = to_string(num);
//取最右边的为初始最大值
int n = s.length();
int max_idx = n-1;
//p,q来标记互换的下标,
int p = -1,q;
for(int i = n-2; i >= 0;i--){
//左边有较大值
if(s[i] > s[max_idx]){
max_idx = i;
}
//遇到左边的值小于最大值,则标记一下最大值和最小值的下标
else if(s[i] < s[max_idx]){
p = i;
q = max_idx;
}
}
//p=-1说明从左到右是降序,则不需要交换
if( -1 == p) return num;
//交换位置得出结果
swap(s[p],s[q]);
return stoi(s);
}
};