• lintcode-182-删除数字


    182-删除数字

    给出一个字符串 A, 表示一个 n 位正整数, 删除其中 k 位数字, 使得剩余的数字仍然按照原来的顺序排列产生一个新的正整数。
    找到删除 k 个数字之后的最小正整数。
    N <= 240, k <= N

    样例

    给出一个字符串代表的正整数 A 和一个整数 k, 其中 A = 178542, k = 4
    返回一个字符串 "12"

    标签

    贪心 LintCode 版权所有

    思路

    使用回溯和贪心的方法,参考 http://www.cnblogs.com/easonliu/p/4507657.html

    • 首先放入一个数字(若为 0 ,跳过)
    • 若此数字之后的数字小于它,取出,存入后一个数字(在还存在要删除的数字的情况下)
    • 最后,若还有数字未删除,删除多余的数字

    code

    class Solution {
    public:
        /**
         *@param A: A positive integer which has N digits, A is a string.
         *@param k: Remove k digits.
         *@return: A string
         */
        string DeleteDigits(string A, int k) {
            // wirte your code here
            int size = A.size();
            if (size <= 0 || size < k) {
                return A;
            }
            string result;
            int newSize = 0;
            for (int i = 0; i < size; i++) {
                while (!result.empty() && result.back() > A[i] && newSize < k) {
                    result.pop_back();
                    newSize++;
                }
                if (A[i] != '0' || !result.empty()) {
                    result.push_back(A[i]);
                }
            }
            if (newSize < k) {
                result.resize(result.size() - k + newSize);
            }
            return result;
        }
    };
    
  • 相关阅读:
    [树状数组]JZOJ 4658 小Z调顺序
    [差分数组]JZOJ 3187 的士
    [BFS]JZOJ 4671 World Tour
    [BFS]JZOJ 4672 Graph Coloring
    [数学]JZOJ 4673 LCS again
    shell:正则表达式和文本处理器
    开发脚本自动部署及监控
    Linux中的重启命令
    nginx和nfs
    网络相关配置
  • 原文地址:https://www.cnblogs.com/libaoquan/p/7286550.html
Copyright © 2020-2023  润新知