这里实际采用了单调栈的思想,单调栈就是要在栈内保持其单调性(单调递增或单调递减)。我们需要移除遇到的“峰”或“谷”。这道题就是要删除每次遇到的“峰”。
关于单调栈的总结:单调栈与单调队列
public String removeKdigits(String num, int k) {
StringBuffer numBuffer = new StringBuffer(num);
while(k>0){
for(int i=0;i<numBuffer.length();i++){//删除遇到的第一个峰
if(i+1<numBuffer.length()&&numBuffer.charAt(i+1)<numBuffer.charAt(i)){
numBuffer.deleteCharAt(i);
break;
}else if(i==numBuffer.length()-1){
numBuffer.deleteCharAt(i);
break;
}
}
k--;
}
while(numBuffer.length()>0&&numBuffer.charAt(0)=='0'){//去年前导0
numBuffer.deleteCharAt(0);
}
String res = numBuffer.toString();
if(res.equals("")) return "0";
else return res;
}
本文介绍了一种使用单调栈思想解决峰值删除问题的方法。通过维护一个单调递增或递减的栈,每次遇到峰值即进行删除操作,直至达到指定次数。算法还包含了去除前导零的步骤,确保最终字符串的有效性。
280

被折叠的 条评论
为什么被折叠?



