AcWing 1453. 移掉K位数字
原题链接
中等
作者:
_zhy
,
2021-04-12 13:30:01
,
所有人可见
,
阅读 368
#include <iostream>
using namespace std;
int main ()
{
string num;
int k;
cin >> num >> k;
string res;
for (int i = 0; i < num.size(); i ++ )
{
while (k && num[i] < res.back()) // 如果出现逆序对就说明前面的数比后面的数大
{ // 就可以删掉前面大的数,保留后面小的数
k --;
res.pop_back();
}
res += num[i];
}
// 如果k没有为0,因为这是序列应该是升序的,所以就从后往前删,直到k为0
while (k --) res.pop_back();
// 去掉前导0
int i = 0;
while (i < res.size() && res[i] == '0') i ++;
// 如果i已经到了res的末端,说明该序列就是0
if (i == res.size()) cout << "0";
// 从i的位置往后输出
else cout << res.substr(i) << endl;
return 0;
}