zoukankan      html  css  js  c++  java
  • LeetCode 402. Remove K Digits

    原题链接在这里:https://leetcode.com/problems/remove-k-digits/description/

    题目:

    Given a non-negative integer num represented as a string, remove k digits from the number so that the new number is the smallest possible.

    Note:

    • The length of num is less than 10002 and will be ≥ k.
    • The given num does not contain any leading zero. 

    Example 1:

    Input: num = "1432219", k = 3
    Output: "1219"
    Explanation: Remove the three digits 4, 3, and 2 to form the new number 1219 which is the smallest.

    Example 2:

    Input: num = "10200", k = 1
    Output: "200"
    Explanation: Remove the leading 1 and the number is 200. Note that the output must not contain leading zeroes.

    Example 3:

    Input: num = "10", k = 2
    Output: "0"
    Explanation: Remove all the digits from the number and it is left with nothing which is 0.

    题解:

    利用stack保存从头到尾iterate input num string的char, if current char c < stack top, then一直pop栈顶 unitl 去掉的数等于k了或者栈顶的元素更小.

    然后从头到尾找到第一个非0的位置 往后扫剩余digit长度的char. 

    扫过的0也应该count在剩余digit长度中,只不过不会显示在结果string里.

    Time Complexity: O(n). n = num.length().

    Space: O(n).

    AC Java:

     1 class Solution {
     2     public String removeKdigits(String num, int k) {
     3         if(num == null || num.length() == 0){
     4             return num;
     5         }
     6         
     7         int len = num.length();
     8         int remainDigits = len-k;
     9         char [] stk = new char[len];
    10         int top = 0;
    11         for(int i = 0; i<len; i++){
    12             char c = num.charAt(i);
    13             while(top>0 && c<stk[top-1] && k>0){
    14                 top--;
    15                 k--;
    16             }
    17             
    18             stk[top++] = c;
    19         }
    20         
    21         // 找到第一个不为0的index
    22         int ind = 0;
    23         while(ind<remainDigits && stk[ind]=='0'){
    24             ind++;
    25         }
    26         return ind == remainDigits ? "0" : new String(stk, ind, remainDigits-ind);
    27     }
    28 }

    类似Create Maximum NumberMaximum Swap.

  • 相关阅读:
    在linux下使用sqlcmd
    sqlserver 索引的结构及其存储,索引内容
    据库被标记为RESTORING的处理方式,正在还原中,正在恢复
    sql语句的优化分析
    SQL Server表分区-水平分区
    JavaScript Structure
    JS----Issue
    JavaScript Book Plan
    LINQ
    About JavaScript
  • 原文地址:https://www.cnblogs.com/Dylan-Java-NYC/p/8327380.html
Copyright © 2011-2022 走看看