算法训练:Remove K Digits

来源:互联网 发布:抗日网络剧牺牲 编辑:程序博客网 时间:2024/05/19 06:38

题目链接:https://leetcode.com/problems/remove-k-digits/#/description


题目描述:

      给定一个包含非负整数的字符串,移除其中的k个数,使得剩下的数字是最小的   

解题思路:

     如果n是num的长度,我们要去除k个,那么需要剩下n-k个数,定义一个result数组用于保存剩下的字符,与result中最后一个字符相比,比它小,

栈中最后一个字符出栈,该字符进栈,否则该字符直接进栈。值得注意的是在删除k个数之后,若剩下的数前面有0,应该去掉。

   string removeKdigits(string num, int k) {        string result = "";        int n = num.size(), remainNum = n - k;        for (char c : num) {            while (k && result.size() && result.back() > c) {                result.pop_back();                --k;            }            result.push_back(c);        }        result.resize(remainNum);//重置大小        while (!result.empty() && result.front()== '0'){             result.erase(result.begin());//去掉得到结果最前面的字符0        }        return result.empty() ? "0" : result;    }

运行结果:

Your Input
"1432215629" 3
Your answer
"1215629"
Expected answer
"1215629"