美文网首页
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