MENU

LeetCode402. 移掉 K 位数字

July 5, 2018 • Read: 3231 • LeetCode阅读设置

这道题可以用栈来模拟

主要问题在于,删什么数字?假设有一串数字 1432219,首先将 1 入栈,然后 4 准备入栈的过程中判断是否小于当前栈顶元素,如果小于,就把栈顶元素出栈,并且这是个 while 的循环,如果一直比栈顶小,就一直出栈,直到 k 的次数不够或者没有元素了

还有一个问题,加入是一个递增的序列,例如 12345,每一个位置上的数字都比前一个要大,这种情况应该特殊考虑,直接从末尾开始删除 n 个数字即可

  • class Solution {
  • public:
  • string removeKdigits(string num, int k) {
  • vector<int>s;
  • string result = "";
  • for(int i = 0;i < num.length();i++){
  • int number = num[i] - '0';
  • while(s.size() != 0 && number < s.back() && k > 0){
  • //当栈不空,栈顶元素大于number,仍可以删除同时满足
  • s.pop_back();
  • k--;
  • }
  • if(number != 0 || s.size() != 0)
  • s.push_back(number);
  • }
  • while(s.size() != 0 && k > 0){//仍然可以删除数字
  • s.pop_back();
  • k--;
  • }
  • for(int i = 0;i < s.size();i++)
  • result.append(1,'0' + s[i]);
  • return result == "" ? "0" : result;
  • }
  • };
Last Modified: May 12, 2021
Archives Tip
QR Code for this page
Tipping QR Code