美文网首页
Remove K Digits

Remove K Digits

作者: 我叫胆小我喜欢小心 | 来源:发表于2017-05-16 15:23 被阅读39次

    题目来源
    给一串数字字符串,去除k个字符,使得剩下的数字最小。
    我想的是每次都从前往后遍历,去掉第一个极大值。
    代码如下:

    class Solution {
    public:
        string removeKdigits(string num, int k) {
            if (num.size() <= k)
                return "0";
            string res = num;
            for (int i=0; i<k; i++) {
                int cut = false;
                for (int j=0; j<res.size()-1; j++)
                    if (res[j] > res[j+1]) {
                        res.erase(res.begin()+j);
                        cut = true;
                        break;
                    }
                if (!cut)
                    res.erase(res.end()-1);
            }
            while (res[0] == '0')
                res = res.substr(1);
            if (res == "")
                res = "0";
            return res;
        }
    };
    

    想了想,不用每次都从前开始遍历,直接从上次接着往下就可以了,代码如下:

    class Solution {
    public:
        string removeKdigits(string num, int k) {
            if (num.size() <= k)
                return "0";
            string res = num;
            int cur = 0;
            for (int i=0; i<k; i++) {
                int cut = false;
                for (int j=cur; j<res.size()-1; j++)
                    if (res[j] > res[j+1]) {
                        res.erase(res.begin()+j);
                        cut = true;
                        cur = j;
                        break;
                    }
                if (cur != 0)
                    cur--;
                if (!cut)
                    res.erase(res.end()-1);
            }
            while (res[0] == '0')
                res = res.substr(1);
            if (res == "")
                res = "0";
            return res;
        }
    };
    

    相关文章

      网友评论

          本文标题:Remove K Digits

          本文链接:https://www.haomeiwen.com/subject/xpelxxtx.html