402. 移掉 K 位数字

链接:

402. 移掉 K 位数字

题解:

class Solution {
public:
    string removeKdigits(string num, int k) {
        vector<char> stk;
        for (auto& digit: num) {
            while (stk.size() > 0 && stk.back() > digit && k) {
                stk.pop_back();
                k -= 1;
            }
            stk.push_back(digit);
        }

        for (; k > 0; --k) {
            stk.pop_back();
        }

        string ans = "";
        bool isLeadingZero = true;
        for (auto& digit: stk) {
            if (isLeadingZero && digit == '0') {
                continue;
            }
            isLeadingZero = false;
            ans += digit;
        }
        return ans == "" ? "0" : ans;
    }
};
class Solution {
public:
    string removeKdigits(string num, int k) {
        std::vector<char> sta;
        for (int i = 0; i < num.size(); ++i) {
            while (!sta.empty() && sta.back() > num[i] && k > 0) {
                sta.pop_back();
                --k;
            }
            sta.push_back(num[i]);
        }
        while (k > 0) {
            sta.pop_back();
            --k;
        }
        int i = 0;
        for (; i < sta.size(); ++i) {
            if (sta[i] != '0') {
                break;
            }
        }
        if (i == sta.size()) {
            return "0";
        }
        std::string result;
        for (; i < sta.size(); ++i) {
            result += sta[i];
        }
        return result;
    }
};

猜你喜欢

转载自blog.csdn.net/INGNIGHT/article/details/132528399