题目
给定一个以字符串表示的非负整数 ,移除这个数中的 位数字,使得剩下的数字最小。
注意:
- 空字符串被视为0。
- 如果结果中包含前导零,则需要将前导零删除,最后删除的前导零不用包含在移除的 个数字中。
输入格式
第一行输入一个字符串,用来表示非负整数 。
第二行输入一个整数,表示 。
输出格式
输出一个字符串,表示移除 位数字后所能得到的最小数字。
数据范围
字符串长度 ,
中不包含任何前导 。
输入样例1:
1432219
3
输出样例1:
1219
样例1解释
移除掉三个数字 可形成一个新的最小的数字 。
输入样例2:
10200
1
输出样例2:
200
样例2解释:
移掉首位的 剩下的数字为 . 注意输出不能有任何前导零。
输入样例3:
10
2
输出样例3:
0
样例3解释
从原数字移除所有的数字,剩余为空就是 。
题解
每次看了大佬的代码我就觉得我是个麻瓜…
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| #include <iostream>
using namespace std;
int main() { string s, res; int k; cin >> s >> k;
res = "0"; for (int i = 0; i < s.size(); ++ i) { while(k && s[i] < res.back()) { -- k; res.pop_back(); } res += s[i]; }
while (k --) res.pop_back();
int i = 0; while (i < res.size() && res[i] == '0') ++ i;
if (i == res.size()) puts("0"); else cout << res.substr(i) << endl;
return 0; }
|