思路:
假设数字 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);}
};