zoukankan      html  css  js  c++  java
  • 402. 移掉K位数字

    给定一个以字符串表示的非负整数 num,移除这个数中的 k 位数字,使得剩下的数字最小。

    注意:

    num 的长度小于 10002 且 ≥ k。
    num 不会包含任何前导零。
    示例 1 :

    输入: num = "1432219", k = 3
    输出: "1219"
    解释: 移除掉三个数字 4, 3, 和 2 形成一个新的最小的数字 1219。

    class Solution {
    public:
        //得利用栈来解决。思路是贪心:1 4 3 2 2 1 9其实当num[i] < num[i-1]时,删除num[i-1]
        string removeKdigits(string num, int k) {
            stack<char> s;
            int i=0;
            while(k&&i<num.size()){
                if(s.size()==0||s.top()<=num[i]){
                    s.push(num[i]);
                    i++;
                    continue;
                }
                if(s.size()>0&&s.top()>num[i]){
                    k--;
                    s.pop();
                }   
            }
            while(i<num.size()){
                s.push(num[i]);
                i++;
            }
            while(k){
                if(s.size()>0){
                    k--;
                    s.pop();
                }else{
                    break;
                }
            }
            string res;
            while(s.size()){
                res.push_back(s.top());
                s.pop();
            }
            reverse(res.begin(),res.end());
            while(res.size()>0&&res[0] == '0'){
                res.erase(res.begin());
            }
            if(res.size() == 0){
                return "0";
            }
            return res;
        }
    };
    

      优化

    class Solution {
    public:
    //优化,直接 把result结果作为栈使用
        string removeKdigits(string num, int k) {
            string result;
            for(int i=0;i<num.size();i++){
                while(result.size()>0&&k>0&&num[i] < result.back()){
                    result.pop_back();
                    k--;
                }
                if(result.size()==0&&num[i]=='0')
                    continue;
                result.push_back(num[i]);
            }
            while(k&&result.size()>0){
                k--;
                result.pop_back();
            }
            if(result == ""){
                return "0";
            }
            return result;
        }
    };
  • 相关阅读:
    B树,B+树
    中断
    死锁
    无锁队列
    Cookie和Session
    分布式系统一致性
    c++ 标准库迭代器失效
    html5 app图片预加载
    html5 手机APP计算高度问题
    html5 750 REM JS换算方法
  • 原文地址:https://www.cnblogs.com/wsw-seu/p/13193278.html
Copyright © 2011-2022 走看看