• 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";
        }
    }
    
  • 相关阅读:
    跨页传值另一种方法
    运行nodejs的blog程序遇见问题
    nodejs和mongodb实践
    mongodb数据库实践笔记
    两次分页显示内容——先少后多显示
    Java进阶4表达式中的陷阱
    Java进阶3. 内存回收机制
    Java进阶1. Synchronized 关键字
    Java复习9网路编程
    Java复习8.多线程
  • 原文地址:https://www.cnblogs.com/a1439775520/p/13075741.html
Copyright © 2020-2023  润新知