题目
思路
话不多说,直接上代码
代码
/*
leetcode402.移掉 K 位数字-XMUOJ符文序列
--JinlongW-2024/05/26
单调栈+贪心
*/
#include<bits/stdc++.h>
const int N=1010;
char num[N],result[N],numStack[N];
int k;
using namespace std;
void removeKdigits( int k) {
int len = strlen(num);
int top = 0; // numStack 栈顶指针
for (int i = 0; i < len; ++i) {
char digit = num[i];
while (k > 0 && top > 0 && numStack[top - 1] > digit) {
--top;
--k;
}
numStack[top++] = digit;
}
// 如果 K > 0,删除末尾的 K 个字符
while (k > 0 && top > 0) {
--top;
--k;
}
// 去除前导零
int idx = 0;
bool leadingZero = true;
for (int i = 0; i < top; ++i) {
if (leadingZero && numStack[i] == '0') {
continue;
}
leadingZero = false;
result[idx++] = numStack[i];
}
// 如果结果为空,返回 "0"
if (idx == 0) {
result[idx++] = '0';
}
result[idx] = '\0'; // null-terminate the result string
}
int main() {
cin >> k;
cin >> num;
removeKdigits(k);
cout << result << endl;
return 0;
}