难度中等
给定一个以字符串表示的非负整数 num,移除这个数中的 k 位数字,使得剩下的数字最小。
注意:
- num 的长度小于 10002 且 ≥ k。
- num 不会包含任何前导零。
思路:
删除K个数字剩下的数字最小,最优结果是保证删除的数为较大的数即可。
采用向量保存当前经过的数字,若是当前数字小于前面的数字,删除前面的数字(还没有删除完指定数量的数字)。
根据向量中的数字重建字符串。
string removeKdigits(string num, int k) {
vector<int> data;
for(auto &c:num){
while(k && data.size()>0 && data.back() >c ){
data.pop_back();
--k;
}
data.push_back(c);
}
for(;k>0;--k){
data.pop_back();
}
string ans="";
bool isFirstZero=true;
for(auto& C:data){
if(isFirstZero && C=='0') continue;
isFirstZero=false;
ans+=C;
}
return ans==""? "0":ans;
}