https://leetcode-cn.com/problems/remove-k-digits/submissions/
没有什么好说的,这个就是一个贪心。把前面的数都尽可能变得小。
其实一开始我想的是另一个问题,是连续删除几个数字。难度当然是变小了。只需要从头找到尾巴之前的k个值。
我发现的自己和题解的差距就在于,一致性的不足。我的头或者尾巴需要自己的特殊处理,不如说是一种化归。而题解似乎都是顺顺利利都是一个范式的。这个真的需要良好的设计吧。
容我多问几句,到底这些零零散散的访问量是从哪里来的。
我感觉自己的博客是不会被搜索到的。
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);
}
while(k>0){
stk.pop_back();
k--;
}
string ans="";
int i=0;
int n=stk.size();
while(n&&stk[i]=='0'){
i++;
n--;
}
if(n==0) return "0";
else{
for(int j=0;j<n;j++)
ans+=stk[i++];
return ans==""?"0":ans;
}
}
};
顺便记一下C++吧。也就是说,pop_back()是把尾巴元素弹出,string类里面+符号重载,进行了后缀添加。