您的位置:首页 > 其它

LintCode "Delete Digits"

2015-10-05 01:14 330 查看
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;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: