题目描述:
用栈来实现,每次判断栈顶元素和当前元素谁大,如果栈顶元素大,那么需要弹出,然后继续和栈顶比较,当然这个的前提是栈不为空。之后放入该元素。当然有一些细节,比如只能移走k个,而且要去掉前导零等等
代码:
class Solution {
public String removeKdigits(String num, int k) {
if(k >= num.length() ){
return "0";
}
Stack<Character> stack = new Stack<>();
char [] tem = num.toCharArray();
for (int i = 0; i < tem.length; i++) {
while (!stack.isEmpty() && tem[i] < stack.peek()) {
if(k-- > 0){
stack.pop();
}else {
return removeprezero(get(num, i, stack));
}
}
stack.push(tem[i]);
}
while (k > 0) {
stack.pop();
k --;
}
StringBuilder sb = new StringBuilder();
System.out.println(stack);
while (!stack.isEmpty()) {
sb.append(stack.pop());
}
return removeprezero(sb.reverse().toString());
}
public String removeprezero(String num){
int index = 0;
while (index < num.length() && num.charAt(index) == '0') {
index ++;
}
if(index == num.length()){
return "0";
}else {
return num.substring(index);
}
}
public String get(String num,int index,Stack<Character> stack){
StringBuilder stringBuilder = new StringBuilder();
while (!stack.isEmpty()) {
stringBuilder.append(stack.pop());
}
stringBuilder.reverse();
stringBuilder.append(num.substring(index));
return stringBuilder.toString();
}
}
引申:如果移掉K位数字使数字最大呢?那么我考虑在这个基础上稍微改一些代码,将栈顶元素和当前元素进行比较,如果当前元素比栈顶元素大,那么弹出栈顶元素,接着比较(这个算法没有验证,一开始我就写成这样了)