### 解题思路
把尽可能高位的最小数字和尽可能低位的最大数字进行交换
1.从低位到高位进行遍历,保存遍历到当前位为止的最大数的位置
2.从高位到低位进行遍历,找到第一个小于后位的最大数进行交换
### 代码
class Solution {
public:
vector<int> hm;
int maximumSwap(int num) {
string nums = to_string(num);
hm = vector<int>(nums.size(),0);
int maxid = nums.size() - 1;
for(int i = nums.size() - 1; i >= 0; --i){
if(nums[i] > nums[maxid]) maxid = i;
hm[i] = maxid;
}
for(int i = 0; i < nums.size();++i){
if(nums[i] != nums[hm[i]]){
swap(nums[i],nums[hm[i]]);
break;
}
}
return stoi(nums);
}
};