贪心-leetcode402.移掉 K 位数字-XMUOJ符文序列

题目

思路

话不多说,直接上代码

代码

/*
  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;
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值