zoukankan      html  css  js  c++  java
  • 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;
        }
    };
    
  • 相关阅读:
    约瑟夫问题
    十点半
    鹊桥相会
    C语言实验——数日子
    汉诺塔
    读入字符串
    C语言实验——各位数字之和排序
    数据结构实验之链表五:单链表的拆分
    C语言实验——分割整数
    大一上学期
  • 原文地址:https://www.cnblogs.com/libaoquan/p/7286550.html
Copyright © 2011-2022 走看看