zoukankan      html  css  js  c++  java
  • 算法——移掉K位数字使得数值最小

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

    解题思路:如果这个数的各个位是递增的,那么直接从最后面开始移除一定就是最最小的;如果这个数的位值不是底层的,那么,尽量移除高位的逆序数字。如果最后变成递增了之后,k还有的剩,就再从后面移除大的数字。

    记得需要移除高位的没有用的零。

    class Solution {
        public String removeKdigits(String num, int k) {
            StringBuilder res = new StringBuilder();
    
            for(int i = 0; i < num.length(); i++) {
                while(res.length() > 0 && res.charAt(res.length() - 1) > num.charAt(i) && k > 0) {
                    res.deleteCharAt(res.length() - 1);
                    k--;
                }
    
                res.append(num.charAt(i));
            }
    
            while(k > 0) {
                res.deleteCharAt(res.length() - 1);
                k--;
            }
    
            while(res.length() > 0 && res.charAt(0) == '0') {
                res.deleteCharAt(0);
            }
    
            if(res.length() == 0) res.append('0');
    
            return res.toString();
        }
    }
    
  • 相关阅读:
    BZOJ3631 [JLOI2014] 松鼠的新家
    HDU
    HDU
    HDU
    二分图求最大独立集模板
    HDU
    HDU
    HDU
    Codeforces 1197F Coloring Game 矩阵快速幂 (看题解)
    HDU
  • 原文地址:https://www.cnblogs.com/lippon/p/14117651.html
Copyright © 2011-2022 走看看