leetcode-402. Remove K Digits

来源:互联网 发布:金字塔原理 知乎 编辑:程序博客网 时间:2024/06/02 03:48

考察点:栈,贪心;
思路:贪心的思路就是从左往右遍历,第一个遇到的char要放入栈中,后面的char如果小于栈顶元素,应该出栈,更换栈顶元素。

C++ 代码:

class Solution {public:    string removeKdigits(string num, int k) {        if (k == num.size() || num.size() == 0) return "0";        int digits = num.size() - k;        //vector<char> sta(num.size(), '0');        stack<char> sta;        int sum=0;        int top = 0;        for (int i=0; i<num.size(); i++) {            char temp = num[i];            while (sta.size() > 0 && sta.top() > temp && k>0) {                sta.pop();                k--;            }            sta.push(temp);        }        stack<char> sta_2 ;        while (sta.size()) {            sta_2.push(sta.top());            sta.pop();        }        while (sta_2.size() && sta_2.top() == '0') {            sta_2.pop();        }        string result;        if (sta_2.size() == 0) {            return "0";        } else {            int index=0;            while (sta_2.size() && index < digits) {                result += sta_2.top();                sta_2.pop();                index++;            }        }        return result;    }};
原创粉丝点击