给定一个十进制的正整数number,选择从里面去掉一部分数字。略去。
看完题目,这道题就是上次leetcode周赛的那一题,不过那道题目求的是最小值,这里求的是最大值。那道题的题解放上http://www.cnblogs.com/y119777/p/5882667.html ,上次是大于号,这次改成小于号就ok了。注意退化的情况,以及前导0.
1 #include<bits/stdc++.h> 2 #define pb push_back 3 #define FOR(i, n) for (int i = 0; i < (int)n; ++i) 4 #define dbg(x) cout << #x << " at line " << __LINE__ << " is: " << x << endl 5 typedef long long ll; 6 using namespace std; 7 typedef pair<int, int> pii; 8 const int maxn = 1e3 + 10; 9 string work(string num, int k) { 10 int n = num.size(); 11 if(k >= n) { 12 return "0"; 13 } 14 while(k) { 15 int i = 0; 16 bool f = 0; 17 for (i = 0; i < num.size() - 1; i++) { 18 if(num[i] < num[i + 1]) { 19 f = 1; 20 num = num.erase(i, 1); 21 break; 22 } 23 } 24 if(!f) { 25 num = num.substr(0, num.size() - 1); 26 } 27 k--; 28 } 29 while(num.size() > 1 && num[0] == '0') num = num.substr(1); 30 return num; 31 } 32 void solve() { 33 string str; int k; 34 cin >> str >> k; 35 cout << work(str, k) << endl; 36 } 37 int main() { 38 //freopen("test.in", "r", stdin); 39 //freopen("test.out", "w", stdout); 40 solve(); 41 return 0; 42 }