402. 移掉K位数字
思路:
这一题写出来还算顺利,不过主要得益于我看了题目的标签,不然我可能不会采用栈/(ㄒoㄒ)/~~
我首先观察题目所给的例子,然后在草稿纸上模拟一下整个过程,具体是这样的:遇到比栈顶更大的元素就直接出栈,若比栈顶小则说明此时栈顶是栈中最大的元素,在k大于0的情况下栈顶出栈,知道当前元素满足入栈条件:
Stack<Character> stack = new Stack<>();
int i = 0;
while(i < num.length()){
while(!stack.isEmpty() && (num.charAt(i)-'0') < (stack.peek()-'0')){
if(k > 0){
stack.pop();
k--;
}else{
break;
}
}
stack.add(num.charAt(i));
i++;
}
当然,退出这个while循环后k可能还是大于0的,那么这时候直接让栈顶出栈即可,因为栈顶就是最大的元素:
while(k > 0)