题目
思路
话不多说,直接上代码
代码
/*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;
}