美文网首页
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