码迷,mamicode.com
首页 > 其他好文 > 详细

LintCode "Delete Digits"

时间:2015-10-05 01:55:06      阅读:215      评论:0      收藏:0      [点我收藏+]

标签:

Greedy: remove earliest down-edge: like "54", "97".

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)
    {
        size_t n = A.size();

        int cnt = 0;

        int i = 0;
        while(i < n - 1)
        {
            if(A[i] > A[i + 1])
            {
                A.erase(i, 1);
                if(i > 0) i--;
                n --;
                if(++cnt == k)    break;
            }
            else
            {
                i ++;
            }
        }
        if(cnt < k) // all ascending, remove last
        {
            n = A.size();
            A = A.substr(0, n - (k - cnt));
        }
        
        //  Remove leading 0s
        i = 0, n = A.size();
        while(i < n && A[i] == 0) i ++;
        A = A.substr(i);
        if(A.empty()) A = "0";
        
        return A;
    }
};

LintCode "Delete Digits"

标签:

原文地址:http://www.cnblogs.com/tonix/p/4855257.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!