题目

方法:栈
- 若要使得剩下的数字最小,需要保证靠前的数字尽可能小。


class Solution {
public String removeKdigits(String num, int k) {
Stack<Character> stack = new Stack<>();
for (int i = 0; i < num.length(); i++) {
while (!stack.isEmpty() && k > 0 && stack.peek() - '0' > num.charAt(i) - '0') {
stack.pop();
k--;
}
stack.push(num.charAt(i));
}
for (int i = 0; i < k; i++) {
stack.pop();
}
StringBuffer sb = new StringBuffer();
while (!stack.isEmpty()) {
sb.append(stack.pop());
}
StringBuffer rev = sb.reverse();
StringBuffer res = new StringBuffer();
for (int i = 0; i < rev.length(); i++) {
if (res.length() == 0 && rev.charAt(i) == '0' && i != rev.length() - 1) {
continue;
}
res.append(rev.charAt(i));
}
return rev.toString().equals("") ? "0" : res.toString();
}
}