zoukankan      html  css  js  c++  java
  • 移除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、提交运行:

  • 相关阅读:
    继承
    反射
    DOS使用笔记
    [LeetCode] Merge Intervals
    [LeetCode] Insert Interval
    [LeetCode] Permutation Sequence
    [LeetCode] Rotate List
    [LeetCode] Text Justification
    [LeetCode] Simplify Path(可以不用看)
    [LeetCode] Edit Distance(很好的DP)
  • 原文地址:https://www.cnblogs.com/BaoZiY/p/10693169.html
Copyright © 2011-2022 走看看