移除K位数字

1、题目来源:选自LeetCode 402:

2、问题描述:

3、问题分析

 

 

  通过分析我们可以得出这样的结论:如果后一个数字比前面的数字小的话,那么我们就要把前面的一个数字删除掉,并且每次把字符串中拆出来的数字push进栈的时候要考虑特殊情况:当栈不为空的时候可以把数字0存进去,反之如果栈为空且数字为0,那么这时候0就不能入栈;如果for循环结束但是K的值依然还是大于0.例如字符串为“12345” k=2就会出现这样的情况,我们就要在删除后面的较大的数字才能符合题意。

4、实现代码:

 1  public String removeKdigits(String num, int k) {
 2         Stack<Integer> stack=new Stack<Integer>();
 3         Stack<Integer> temp_stack=new Stack<Integer>();
 4         int size=0;
 5         String result="";
 6         //这个循环结束就能把一般情况下需要删除几个数字的情况解决完毕
 7         for(int i=0;i<num.length();i++){
 8             int number=num.charAt(i)-'0';
 9             //当栈不为空、当前的number<栈顶元素、k的值为大于0的情况下,弹出栈顶元素
10             while(stack.size()!=0&&stack.peek()>number&&k>0){
11                 stack.pop();
12                 k--;
13             }
14             //当栈不为空或者将要入栈的number不是0的情况下都可以直接入栈
15             //(这其实已经包含了很多中情况了)
16             if(number!=0||stack.size()!=0){
17                 stack.push(number);
18             }
19         }
20         while(stack.size()!=0&&k>0){
21             stack.pop();
22             k--;
23         }
24         while(stack.size()!=0){
25             temp_stack.push(stack.pop());
26         }
27         size=temp_stack.size();
28         for(int i=0;i<size;i++){
29             char temp=(char) (temp_stack.pop()+'0');
30             result+=temp;
31         }
32            if(result==""){
33             result="0";
34         }
35         return result;
36     }

5、提交运行:

原文地址:https://www.cnblogs.com/BaoZiY/p/10693169.html