670. 最大交换

670. 最大交换_第1张图片

链接:

​​​​​​670. 最大交换

题解:

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

670. 最大交换_第2张图片

class Solution {
public:
    int maximumSwap(int num) {
        if (num <= 0) {
            return 0;
        }
        std::string str = to_string(num);
        stack 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());
    }
};

你可能感兴趣的:(leetcode,c++,算法,数据结构)