链接:
670. 最大交换
题解:
力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
class Solution {
public:
int maximumSwap(int num) {
if (num <= 0) {
return 0;
}
std::string str = to_string(num);
stack<int> sta;
int i = 0;
for (i = 0; i < str.size(); ++i) {
if (!sta.empty() && str[sta.top()] < str[i]) {
break;
}
sta.push(i);
}
if (i == str.size()) {
return num;
}
int max_val = i;
for (int right = i; i < str.size(); ++i) {
if (str[max_val] <= str[i]) {
max_val = i;
}
}
int left = i-1;
while (!sta.empty() && str[max_val] > str[sta.top()]) {
left = sta.top();
sta.pop();
}
swap(str[left], str[max_val]);
return atoi(str.c_str());
}
};