题目:
代码(首刷看解析 2024年3月29日):
class Solution {
public:
string removeKdigits(string num, int k) {
// 单调栈,栈顶放最大值
stack<char> stk;
for (auto digit : num) {
while (!stk.empty() && k > 0 && stk.top() > digit) {
stk.pop();
k--;
}
stk.push(digit);
}
// 处理未移除k个元素
while (k-- > 0 && !stk.empty()) {
stk.pop();
}
// 获得result
string res = "";
while (!stk.empty()) {
//res = stk.top() + res;//这里会导致爆内存
res.push_back(stk.top());
stk.pop();
}
reverse(res.begin(), res.end());
// 处理前导0
while (res.size() > 1 && res[0] == '0') res = res.substr(1);
// 返回结果
return res.empty() ? "0" : res;
}
};