class Solution {
public:
    string removeKnums(string num, int k) {
        stack<int> stk;

        //维护递增栈,让小的数放在高位,
        for(char digit:num){
            while(!stk.empty() && k>0 && stk.top() > digit){
                stk.pop();
                k--;
            }
            stk.push(digit);
        }

        //可能还可以删除,从末尾删除
        while(k>0 && !stk.empty()){
            stk.pop();
            k--;
        }

        //获得字符串
        string result;
        while(!stk.empty()){
            result += stk.top();
            stk.pop();
        }
        reverse(result.begin(), result.end());

        //删除前导零
        int leadingZero = 0;
        while(leadingZero < result.size() && result[leadingZero] == '0'){
            leadingZero++;
        }

        result = result.substr(leadingZero);

        return result.empty()? "0":result;
    }
};