本题源自leetcode
-------------------------------------------------------------------
思路:
1 将整数转换为字符串,然后用一个dp数组记录这个位置应该存放的下标
2 从后往前遍历字符串。填充dp数组
3 从前往后遍历字符串看当前的字符是否应该在这个位置。如果不一样就交换。
代码:
int maximumSwap(int num) {
int result;
string s=to_string(num);
int len=s.length();
vector<int> dp(len,-1);
int pos=len-1;
for(int i=len-1;i>=0;i--){
if(s[i]>s[pos]){
pos=i;
}
dp[i]=pos;
}
for(int i=0;i<len;i++){
if(s[dp[i]]!=s[i]){
swap(s[i],s[dp[i]]);
break;
}
}
result=stoi(s);
return result;
}
思路2:
1 将整数转换为字符串
2 从后向前遍历字符串。找到最大的字符