• May LeetCoding Challenge13 之 单调栈


    所谓单调栈,即栈中的元素单调递增 或 单调递减

    本题用单调栈将数组维护成一个单调递增的集合。用k记录删除的元素个数。

    特别注意三点:

    1.如果num本身为递增序列,需要从从栈中弹出k个元素。

    2.需要删除队头为0的元素,可以初始化一个为true的bool型变量,一旦开始的头部不等于0,bool型变量为false。

    3.如果长度为0,返回"0"。

    JAVA

    class Solution {
        public String removeKdigits(String num, int k) {
            LinkedList<Character> stack = new LinkedList<>();
            StringBuilder res = new StringBuilder();
            for(char c: num.toCharArray()){
                while(k>0 && stack.size()>0 && stack.getLast() > c){
                    stack.removeLast();
                    k--;
                }
                stack.addLast(c);
            }
            for(int i = 0; i < k; i++){
                stack.removeLast(); // "11112" 1 针对这种输入,本身为递增序列,从后面删除k个数
            }
            boolean leadingZero = true; // "10000200" 1 针对这种输入。!!!删除前面为0的方法
            for(char c: stack){
                if(leadingZero && c == '0') continue;
                leadingZero = false; 
                res.append(c);
            }
            if(res.length() == 0) return "0"; //针对"10" 1 这种输入。
            return res.toString();
        }
    }

    Python3

    class Solution:
        def removeKdigits(self, num: str, k: int) -> str:
            stack = []
            res = ""
            for c in num:
                while k and stack and stack[-1] > c:
                    stack.pop()
                    k -= 1
                stack.append(c)
            for i in range(k):
                stack.pop()
            leadingZero = True
            for c in stack:
                if leadingZero and c == '0':
                    continue
                leadingZero = False
                res += c
            if len(res) == 0:
                return "0"
            return res
  • 相关阅读:
    SCU 3133(博弈)
    SCU 3132(博弈)
    hdu 5183(hash)
    hdu3329(2次dfs)
    hdu5179(数位dp)
    zoj2314(有上下界的网络流)
    CF 519E(树上倍增求lca)
    hdu1251(Trie树)
    SCU 2009(数位dp)
    【Leetcode】Letter Combinations of a Phone Number
  • 原文地址:https://www.cnblogs.com/yawenw/p/12884837.html
Copyright © 2020-2023  润新知