- 解题思路:本题的本质是使用单调栈来解题,此单调栈维持了一个从小到大的顺序。而且,还维持了整个字符串数字的顺序,所以可以用来解题。
// 我这种解法其实不是最优的,并且还很慢。但是因为单调栈的思想很重要,可以解决一系列问题,所以还是推荐使用这种方法。
class Solution {
public String removeKdigits(String num, int k) {
int n = num.length() - k;
Stack<Character> stack = new Stack<>();
for(char ch : num.toCharArray()){
while(k > 0 && !stack.isEmpty() && stack.peek() > ch){
stack.pop();
k--;
}
stack.push(ch);
}
String res = "";
while(!stack.isEmpty() && stack.get(0) == '0'){
stack.remove(0);
n--;
}
for(int i = 0; i < n; i++){
res += stack.get(i);
}
return res.length() == 0 ? "0" : res;
}
}