Remove K Digits

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

class Solution {
public:
    string removeKdigits(string num, int k) {
        if (num.size() <= k)
            return "0";
        string res = num;
        for (int i=0; i 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 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)