美文网首页
LeetCode402. Remove K Digits

LeetCode402. Remove K Digits

作者: 24K纯帅豆 | 来源:发表于2019-05-22 18:06 被阅读0次

    1、题目链接

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

    2、解题思路

    题目是说给你一个数字字符串num,然后再给你一个数K,让你移除字符串num中的K个字符,让剩下的字符串转成数字之后最小,想要数字最小,那么我们就尽可能的移除掉左边(相对位置)的大数,这样剩下的才会最小,好像貌似大概又有点贪心的思想在里面,而且这种很明确的比较某些位置字符大小的,我们可以借助一个栈来实现,遍历整个字符串,当栈为空的时候将字符入栈,不为空的时候我们取栈顶元素和即将要入栈的元素进行比较,如果栈顶元素较大,那么可以让当前的栈顶元素出栈,然后继续和栈顶元素比较,否则的话将该元素入栈,直到遍历结束。

    3、代码

    • Java
    public static String removeKdigits(String num, int k) {
        if (num.length() == k) {
            return "0";
        }
        StringBuilder sb = new StringBuilder();
        Stack<Character> chStack = new Stack<>();
        for (int i = 0; i < num.length(); i++) {
            while (!chStack.isEmpty() && chStack.peek() > num.charAt(i) && k > 0) {
                chStack.pop();
                k--;
            }
            chStack.push(num.charAt(i));
        }
        while (!chStack.isEmpty()) {
            if (k > 0) {
                chStack.pop();
                k--;
                continue;
            }
            sb.append(chStack.pop());
        }
        String result = sb.reverse().toString();
        if (result.length() == 0) {
            return "0";
        }
        int cnt = 0;
        while (cnt < result.length() && result.charAt(cnt) == '0') {
            cnt++;
        }
        return cnt == result.length() ? "0" : result.substring(cnt);
    }
    
    • Python
    由于太忙,后续补上
    
    • JavaScript
    由于太忙,后续补上
    

    4、提交结果

    EjIaex.md.png

    相关文章

      网友评论

          本文标题:LeetCode402. Remove K Digits

          本文链接:https://www.haomeiwen.com/subject/erzfzqtx.html