码迷,mamicode.com
首页 > 其他好文 > 详细

402. 移掉K位数字

时间:2020-06-25 23:44:08      阅读:51      评论:0      收藏:0      [点我收藏+]

标签:public   highlight   char   pop   remove   result   一个   begin   rev   

给定一个以字符串表示的非负整数 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;
    }
};

 

402. 移掉K位数字

标签:public   highlight   char   pop   remove   result   一个   begin   rev   

原文地址:https://www.cnblogs.com/wsw-seu/p/13193278.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!