题目
代码(7.17 首刷部分看解析)
这是21年南京大学夏令营的题,正好这几天在做单调栈的题,所以做起来比较顺畅。
一开始是看的解析的title:贪心+单调栈,立刻就想到了下面这个做法了。
class Solution {
public:
string removeKdigits(string num, int k) {
vector<char> stk;
for(char& c : num) {
while(!stk.empty() && c < stk.back() && k) {
stk.pop_back();
k--;
}
stk.push_back(c);
}
for(; k; k--)
stk.pop_back();
int i = 0;
for(; i < stk.size(); i++) {
if(stk[i] == '0') continue;
break;
}
// return to_string(i);
string res(stk.begin() + i, stk.end());
return res == "" ? "0" : res;
}
};
代码(10.1 二刷部分看解析)
单调栈
class Solution {
public:
string removeKdigits(string num, int k) {
vector<char> sk;
for(int i = 0; i < num.size(); i++) {
while(!sk.empty() && sk.back() > num[i] && k) {
k--;
sk.pop_back();
}
sk.push_back(num[i]);
}
string ans(sk.begin(), sk.begin()+sk.size()-k);
int i = 0;
while(ans[i] == '0') i++;
return ans.substr(i) == "" ? "0" : ans.substr(i);
}
};