LeetCode移掉K个数字

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类里面+符号重载,进行了后缀添加。

猜你喜欢

转载自blog.csdn.net/weixin_47741017/article/details/109706807
今日推荐