LeetCode 第402题:移掉K位数字

题目描述
  • 解题思路:本题的本质是使用单调栈来解题,此单调栈维持了一个从小到大的顺序。而且,还维持了整个字符串数字的顺序,所以可以用来解题。
// 我这种解法其实不是最优的,并且还很慢。但是因为单调栈的思想很重要,可以解决一系列问题,所以还是推荐使用这种方法。
class Solution {
    public String removeKdigits(String num, int k) {
        int n = num.length() - k;
        Stack<Character> stack = new Stack<>();
        for(char ch : num.toCharArray()){
            while(k > 0 && !stack.isEmpty() && stack.peek() > ch){
                stack.pop();
                k--;
            }
            stack.push(ch);
        }

        String res = "";
        while(!stack.isEmpty() && stack.get(0) == '0'){
            stack.remove(0);
            n--;
        }
        for(int i = 0; i < n; i++){
            res += stack.get(i);
        }
        return res.length() == 0 ? "0" : res;
    }
}

推荐阅读更多精彩内容

  • 前言 2. 实现 Singleton 3. 数组中重复的数字 4. 二维数组中的查找 5. 替换空格 6. 从尾到...
    Observer_____阅读 1,406评论 0 2
  • 1.把二元查找树转变成排序的双向链表题目:输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。要求不能创建...
    锐心凌志阅读 2,610评论 1 27
  • 动态规划 111. 爬楼梯思路类似斐波那契数列注意考虑第 0 阶的特殊情况 272. 爬楼梯 II思路类似上题,只...
    6默默Welsh阅读 1,515评论 0 1
  • 题目链接难度:中等 类型: 字符串、栈 给定一个以字符串表示的非负整数 num,移除这个数中的 ...
    wzNote阅读 103评论 0 1
  • 说明: 本文中出现的所有算法题皆来自牛客网-剑指Offer在线编程题,在此只是作为转载和记录,用于本人学习使用,不...
    秋意思寒阅读 444评论 1 1