class Solution {
public:
string removeKdigits(string num, int k) {
if(k == num.size()) return "0";
string ans;
while(k--)
{
num = removeone(num);
num = checkzero(num);
}
if(num == "") return "0";
return num;
}
string removeone(string num)
{
int wei = -1;
for(int i = 1; i < num.size(); i++)
{
if(int(num[i]) < int(num[i-1]))
{
wei = i-1;
break;
}
}
if(wei == -1) wei = num.size() - 1;
string temp = "";
for(int i = 0; i < num.size(); i++)
{
if(i != wei)
{
temp.push_back(num[i]);
}
}
return temp;
}
string checkzero(string num)
{
int zero = 0;
for(int i = 0; i< num.size(); i++)
{
if(num[i] != '0')
break;
else
zero++;
}
string temp = "";
for(int i = zero; i < num.size(); i++)
{
temp.push_back(num[i]);
}
return temp;
}
};
思路:
1.每次只删掉一个数字,然后删除首部所有的0,循环k次。
2.策略:从前往后,找到第一个出现的最大值,如果存在就删掉,如果单调上升,则选择最后一个数。