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;
    }
};
posted @ 2017-08-04 18:18  LiBaoquan  阅读(517)  评论(0编辑  收藏  举报