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;
}
};
利用单调栈,在 num[i] > num[i+1] 时,删除num[i] , 并且以此往前推,比num[i+1]大的都要依次出栈。