这道题目很有意思,首先要能够转换成单调栈题目,然后标签里有贪心算法,恕我愚钝,还没有看出来哪里用到了贪心算法。
而且这道题有一些corner case,写题目时不小心就会出错,写法也有很多,不容易写成标准模板。下面是我的代码,总感觉还很有优化空间。
代码
import java.util.ArrayList;
import java.util.List;
import java.util.Stack;
class Solution {
public String removeKdigits(String num, int k) {
Stack<Character> stack = new Stack<>();
List<Character> list = new ArrayList<>();
for (char c : num.toCharArray()) {
while (!stack.isEmpty() && c < stack.peek() && list.size() < k) {
list.add(stack.pop());
}
stack.push(c);
}
while (list.size() < k) {
list.add(stack.pop());
}
if (stack.isEmpty()) {
return "0";
}
StringBuilder sb = new StringBuilder();
while (!stack.isEmpty()) {
sb.append(stack.pop());
}
String s = sb.reverse().toString();
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) != '0') {
s = s.substring(i);
break;
}
if (i == s.length() - 1) {
s = "0";
}
}
return s;
}
}