LeetCode No402.移掉K位数字
发布日期:2021-05-07 23:15:35 浏览次数:14 分类:原创文章

本文共 961 字,大约阅读时间需要 3 分钟。

题目描述

在这里插入图片描述

解法:单调栈

在这里插入图片描述
解题思路:永远保持stack是单调递增的状态,只要还有删除的机会

class Solution {       public String removeKdigits(String num, int k) {           LinkedList<Character> stack = new LinkedList<>();   //栈        int remain = k;   //剩余的丢弃次数        char[] cs = num.toCharArray();  //num的char数组        for (char c : cs) {               while (remain > 0 && !stack.isEmpty() && stack.getLast() > c) {                   --remain;                stack.removeLast();            }            stack.add(c);        }        //如果还有remain,删除后面        while (remain > 0) {               stack.removeLast();            --remain;        }        //忽略前导0        while (!stack.isEmpty() && stack.getFirst() == '0') {               stack.removeFirst();        }        //为空的情况,直接返回0        if (stack.isEmpty()) {               return "0";        }        StringBuilder sb = new StringBuilder();        for (Character c : stack) {               sb.append(c);        }        return sb.toString();    }}
上一篇:LeetCode No496.下一个更大元素 I
下一篇:LeetCode No300.最长递增子序列

发表评论

最新留言

做的很好,不错不错
[***.243.131.199]2025年04月08日 05时37分09秒