链接:
题解:
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;
}
};