思路:
给出一串数字,移除k个,例如:num = "1432219", k = 3,那么我们可以发现,需要移除的是4 3 2这三个数字。我们发现,如果维护一个单调递增的栈,如果while当前元素小于栈顶元素,那么就不停出栈。
我们发现如果“12345” k=2怎么办?我们先将输入的数字最后面的位置填充一个0,就可以处理这种情况,这样可以保证答案的正确性。
代码:
class Solution {
public:
vector<char>v;
int ch[10006];
string removeKdigits(string num, int k) {
int len=num.size();
int p=0;
num[len]='0';
int kk=k;
for(int i=0;i<len;i++)
{
int x=num[i]-'0';
if(x>ch[p])
{
ch[++p]=x;
//进栈
}else
{
while(k>0&&x<ch[p])
{
p--;
k--;
}
ch[++p]=x;
}
}
string ss="";
bool f=0;
for(int i=1;i<=len-kk;i++)
{
if(ch[i]!=0)f=1;
if(f)
ss+=ch[i]+'0';
}
if(!f)ss="0";
return ss;
}
};