• 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";
        }
    }
    
  • 相关阅读:
    The Water Problem HDU-5443
    约瑟夫环1
    迪杰斯特拉算法1 HDU-1874
    [20200729NOIP提高组模拟T2]学数数——坎坷
    [20200728NOIP提高组模拟T4]有趣的有趣的家庭菜园——自闭了
    [20200728NOIP提高组模拟T1]Copy
    [20200728NOIP提高组模拟T2]愉快的logo设计
    [20200727NOIP提高组模拟T3]计算几何
    [20200727NOIP提高组模拟T2]走路
    [CQOI2015]任务查询系统
  • 原文地址:https://www.cnblogs.com/a1439775520/p/12946511.html
Copyright © 2020-2023  润新知