实验6.1给定一个以字符串表示的非负整数num,移除这个数中的k位数 字,使得剩下的数字最小。 注意: num 的长度小于10002且≥k。num不会包含任何前导零。示例 1: 输入:num=“1432219",k=3 输出:“1219” 解释:移除掉三个数字4,3,和 2形成一个新的最小的数字1219。 示例2: 输入:num=“10200",k=1 输出:“200” 解释:移掉首位的 1剩下的数字为200.注意输出不能有任何前导零。写出c++代码
时间: 2024-03-10 16:46:49 浏览: 60
```c++
#include <iostream>
#include <stack>
#include <string>
using namespace std;
string removeKdigits(string num, int k) {
stack<char> stk;
int n = num.size();
for (int i = 0; i < n; i++) {
while (!stk.empty() && k > 0 && stk.top() > num[i]) {
stk.pop();
k--;
}
if (num[i] != '0' || !stk.empty()) stk.push(num[i]);
}
while (!stk.empty() && k > 0) {
stk.pop();
k--;
}
string res = "";
while (!stk.empty()) {
res += stk.top();
stk.pop();
}
reverse(res.begin(), res.end());
return res.empty() ? "0" : res;
}
int main() {
string num = "1432219";
int k = 3;
cout << removeKdigits(num, k) << endl;
return 0;
}
```
阅读全文