题目来源
给一串数字字符串,去除k个字符,使得剩下的数字最小。
我想的是每次都从前往后遍历,去掉第一个极大值。
代码如下:
class Solution {
public:
string removeKdigits(string num, int k) {
if (num.size() <= k)
return "0";
string res = num;
for (int i=0; i<k; i++) {
int cut = false;
for (int j=0; j<res.size()-1; j++)
if (res[j] > res[j+1]) {
res.erase(res.begin()+j);
cut = true;
break;
}
if (!cut)
res.erase(res.end()-1);
}
while (res[0] == '0')
res = res.substr(1);
if (res == "")
res = "0";
return res;
}
};
想了想,不用每次都从前开始遍历,直接从上次接着往下就可以了,代码如下:
class Solution {
public:
string removeKdigits(string num, int k) {
if (num.size() <= k)
return "0";
string res = num;
int cur = 0;
for (int i=0; i<k; i++) {
int cut = false;
for (int j=cur; j<res.size()-1; j++)
if (res[j] > res[j+1]) {
res.erase(res.begin()+j);
cut = true;
cur = j;
break;
}
if (cur != 0)
cur--;
if (!cut)
res.erase(res.end()-1);
}
while (res[0] == '0')
res = res.substr(1);
if (res == "")
res = "0";
return res;
}
};
网友评论