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.结果

提交结果