zoukankan      html  css  js  c++  java
  • Java实现 LeetCode 402 移掉K位数字

    402. 移掉K位数字

    给定一个以字符串表示的非负整数 num,移除这个数中的 k 位数字,使得剩下的数字最小。

    注意:

    num 的长度小于 10002 且 ≥ k。
    num 不会包含任何前导零。
    示例 1 :

    输入: num = “1432219”, k = 3
    输出: “1219”
    解释: 移除掉三个数字 4, 3, 和 2 形成一个新的最小的数字 1219。
    示例 2 :

    输入: num = “10200”, k = 1
    输出: “200”
    解释: 移掉首位的 1 剩下的数字为 200. 注意输出不能有任何前导零。
    示例 3 :

    输入: num = “10”, k = 2
    输出: “0”
    解释: 从原数字移除所有的数字,剩余为空就是0。

    class Solution {
        public String removeKdigits(String num, int k) {
            if (num == null || num.length() == 0) {
                return num;
            }
            int length = num.length();
            if (k <= 0 || k > length) {
                return num;// 非法
            }
            if (k == length) {
                return "0";
            }
    
            char[] chars = num.toCharArray();
    
            char[] newChars = new char[length]; // 移除k个数字的结果
            int newCharsTop = 0;
            for (int i = 0; i < length; i++) {
                while (k > 0 && newCharsTop > 0 && newChars[newCharsTop - 1] > chars[i]) {
                    newCharsTop--;
                    k--; // 移除一个数字
                }
                newChars[newCharsTop] = chars[i];
                newCharsTop++;
            }
            if (k > 0) { // 从后面移除k个数字
                newCharsTop = newCharsTop - k;
                k = 0;
            }
    
            // 起始位置不能是0
            int startIndex = 0;
            while (newChars[startIndex] == '0' && startIndex < newCharsTop) {
                startIndex++;
            }
            // 从起始位置返回  newCharsTop - startIndex
            if (newCharsTop - startIndex > 0) {
                return new String(newChars, startIndex, newCharsTop- startIndex);
            }
    
            return "0";
        }
    }
    
  • 相关阅读:
    在from表单中提交同name数据时,怎么获取所有值
    面试题
    String的创建模式
    spring的事务支持
    微信小程序+java实现附件上传以及下载打开详细过程记录
    spring编写AOP代理上的一点小坑
    java静态内部类的作用
    Python学习 :json、pickle&shelve 模块
    Python学习 :正则表达式
    Python学习 :常用模块(四)----- 配置文档
  • 原文地址:https://www.cnblogs.com/a1439775520/p/13075117.html
Copyright © 2011-2022 走看看