LeetCode No.5 移掉K位数字

1. LeetCode386题目链接链接

https://leetcode-cn.com/problems/remove-k-digits/comments/

2. 结题思路

题目的意思很简单,就是移除两位数,剩下的数是最小的数,前面不能有0。看起来听简单的,动手就开始写,第一天用的贪心算法,递归,越写越麻烦。最后看了下题解,提出了用栈来解决,做开发这么久,虽然栈说的蛮多的,但是在实际中还真的没有用到。方法也不太了解,然后刚好趁着这个题了解下。

//stack.peek()返回栈顶数据但不删除
//stack.pop();返回栈顶数据并删除
public String removeKdigits(String num, int k) {
        Stack<Integer> stack = new Stack<>();
        for (int i = 0; i < num.length(); i++) {
            int n = num.charAt(i) - '0';
            while (!stack.isEmpty() && n < stack.peek() && k != 0) {
                stack.pop();
                k--;
            }
            if (n != 0 || !stack.isEmpty()) {
                stack.push(n);
            }
        }
        while (!stack.isEmpty() && k != 0) {
            stack.pop();
            k--;
        }
        if (stack.isEmpty()) {
            stack.push(0);
        }
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < stack.size(); i++) sb.append(stack.get(i));

        return sb.toString();
    }

3.结果

提交结果
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容