C语言 | Leetcode C语言题解之第282题给表达式添加运算符

news2025/4/6 20:29:16

题目:

题解:

#define MAX_COUNT 10000 // 解的个数足够大
#define NUM_COUNT 100 // 操作数的个数足够大
long long num[NUM_COUNT] = {0};

long long calc(char *a)
{ // 计算表达式a的值
	// 将数字和符号,入栈
	memset(num, 0, sizeof(num));
	int numCnt = 0, opCnt = 0;
	long long value = 0;
    char oper = '+';
	int len = strlen(a);
	for (int i = 0; i < len; i++) {
		if (a[i] == '0') { // 05这种以0开头的数字不符合要求
			if (i < len - 1 && isdigit(a[i+1])) {
				return INT_MIN; // 发现格式不对,直接返回
			}
		}
		if (isdigit(a[i])) {
			for (; isdigit(a[i]); i++) { // 计数数值
				value = value * 10 + (a[i] - '0');
			}
		}
		if (!isdigit(a[i]) || i == len -1) {
			switch(oper) {
			case '+':
				num[numCnt++] = value;
				break;
			case '-':
				num[numCnt++] = -value;
				break;
			case '*':
				value *= num[numCnt - 1];
				num[numCnt - 1] = value;
				break;
			default:
				return INT_MIN; // 发现格式不对,直接返回
			}
			value = 0;
			oper = a[i];
		} 
	}
	value = num[numCnt - 1];
	for (numCnt--; numCnt > 0; numCnt--) {
		value += num[numCnt - 1];
	}
	return value;
}

char* newStr(char *a, int len, int pos, const char*op)
{
	char *t = (char*)calloc(sizeof(char), len);
	strncpy(t, a, pos); // 前段
	strcat(t, op); // 符号
	strcat(t, a + pos); // 后段
	return t;
}

void dfs(char *a, int pos, int target, char**p, int* returnSize)
{
	if (a == NULL || a[0] == 0 || p == NULL || returnSize == NULL) {
		return;
	} 
	int len = strlen(a);
	if (pos >= len) { // 符号已经加全了
		if (target == calc(a)) { // 符合
			if (*returnSize > MAX_COUNT) {
				printf("overflow\n");
				return;
			}
			p[*returnSize] = a;
			(*returnSize)++;
		} else { // 不符合,丢掉
			free(a);
		}
	} else {
		char *a1 = newStr(a, len + 2, pos, "*"); // *号
		char *a2 = newStr(a, len + 2, pos, "+"); // +号
		char *a3 = newStr(a, len + 2, pos, "-"); // -号
		dfs(a1, pos + 2, target, p, returnSize); // *号
		dfs(a2, pos + 2, target, p, returnSize); // +号
		dfs(a3, pos + 2, target, p, returnSize); // -号
		dfs(a, pos + 1, target, p, returnSize); // 不加符号
	}
}

char **addOperators(char *a, int target, int* returnSize)
{
	if (a == NULL || returnSize == NULL) {
		return NULL;
	}
	char **p = (char**)calloc(MAX_COUNT, sizeof(char*));
	if (p == NULL) {
		return NULL;
	}
	*returnSize = 0;
	dfs(strdup(a), 1, target, p, returnSize);
	return p;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1956391.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

差分法求解 Burgers 方程(附完整MATLAB 及 Python代码)

Burgers 方程的数值解及误差分析 引言 Burgers 方程是一个非线性偏微分方程&#xff0c;在流体力学、非线性声学和交通流理论中有广泛应用。本文将通过数值方法求解带粘性的 Burgers 方程&#xff0c;并分析其误差。 方程模型 Burgers 方程的形式为&#xff1a; u t u u …

在react中如何计算本地存储体积

1.定义useLocalStorageSize钩子函数 // 计算localStorage大小 function useLocalStorageSize() {const [size, setSize] useState(0);useEffect(() > {const calculateSize () > {let totalSize 0;for (let key in localStorage) {//过滤掉继承自原型链的属性if (loc…

Profinet转EtherNet/IP协议转化网关(功能与配置)

怎么样把Profinet和EtherNet/IP两个协议连接起来?有很多朋友想要了解这个问题&#xff0c;那么作者在这里统一说明一下。其实有一个不错的设备产品可以很轻易地解决这个问题&#xff0c;名为JM-PN-EIP。接下来作者就从该设备的功能及配置详细说明一下。 一&#xff0c;设备主…

力扣高频SQL 50题(基础版)第二十二题

文章目录 力扣高频SQL 50题&#xff08;基础版&#xff09;第二十二题1084 销售分析题目说明思路分析实现过程准备数据实现方式结果截图 力扣高频SQL 50题&#xff08;基础版&#xff09;第二十二题 1084 销售分析 题目说明 表&#xff1a; Product --------------------- …

Scraperr能从网页中抓取数据

什么是 Scraperr &#xff1f; Scraperr 是一个自托管的 Web 应用程序&#xff0c;允许用户通过 XPath 指定元素从网页中抓取数据。用户可以提交要抓取的 URL 和相应元素&#xff0c;结果将显示在表格中。用户可以下载作业结果的 Excel 表&#xff0c;以及重新运行该作业的选项…

在这个只有病人去的场所,你看到了哪些意料之外的举动?--医者仁心:医院里的温情奇迹

在这个只有病人去的场所&#xff0c;你看到了哪些意料之外的举动? --医者仁心&#xff1a;医院里的温情奇迹 在繁忙与喧嚣交织的医院里&#xff0c;每一天都上演着生与死的较量&#xff0c;但在这片看似冷漠的土地上&#xff0c;却也悄然绽放着无数温暖人心的花朵。今天&…

prompt输入框模拟禁用弹窗

this.$prompt(确认取消申报申请吗?, 提示, {confirmButtonText: 确定,cancelButtonText: 取消,

新款 GPT-4o mini、Llama 3.1、Mistral NeMo 12B 和其他 GenAI 趋势指南

作者使用 GPT-4o 创建的图像&#xff0c;用于表示不同的模型 欢迎来到雲闪世界。自 2022 年 11 月推出 ChatGPT 以来&#xff0c;几乎每周都会出现新的模型、新颖的提示方法、创新的代理框架或其他令人兴奋的 GenAI 突破。2024 年 7 月也不例外&#xff1a;仅在本月&#xff0c…

UDP connect 内核源码分析

1 从诡异开始 最近遇到一个线上问题&#xff0c;client 发了一个 udp 请求&#xff0c;服务器回了一个响应&#xff0c;但诡异的是&#xff0c;client 的 log 却看不到对应的处理日志。抓包发现内核发出了一个指示 udp 目的端口不可达的 icmp 报文&#xff0c;类似这样的&#…

【基于PSINS】UKF/SSUKF对比的MATLAB程序

UKF与SSUKF UKF是&#xff1a;无迹卡尔滤波 SSUKF是&#xff1a;简化超球面无迹卡尔曼滤波 UKF 相较于传统的KF算法&#xff0c;UKF能够更好地处理非线性系统&#xff0c;并且具有更高的估计精度。它适用于多种应用场景&#xff0c;如机器人定位导航、目标跟踪、信号处理等。…

机器学习 | 计算分类算法的ROC和AUC曲线以随机森林为例

受试者工作特征&#xff08;ROC&#xff09;曲线和曲线下面积&#xff08;AUC&#xff09;是常用的分类算法评价指标&#xff0c;本文将讨论如何计算随机森林分类器的ROC 和 AUC。 ROC 和 AUC是量化二分类区分阳性和阴性类别能力的度量。ROC曲线是针对不同分类阈值的真阳性率&…

Mac电脑 系统监测工具 System Dashboard Pro【简单操作,小白轻松上手】

Mac分享吧 文章目录 效果一、下载软件二、开始安装1、双击运行软件&#xff0c;将其从左侧拖入右侧文件夹中&#xff0c;等待安装完毕2、应用程序显示软件图标&#xff0c;表示安装成功 三、运行测试安装完成&#xff01;&#xff01;&#xff01; 效果 一、下载软件 下载软件…

opencascade AIS_PlaneTrihedron 源码学习

AIS_PlaneTrihedron 前言 构建一个可选择的2D轴系在3D绘图中。 这个轴系可以放置在3D系统中的任何位置&#xff0c;提供一个用于在平面中绘制曲线和形状的坐标系。 有三种选择模式&#xff1a; 模式0 选择整个平面“trihedron” 模式1 选择平面“trihedron”的原点 模式2 选择…

Nuxt.js 路由管理:useRouter 方法与路由中间件应用

title: Nuxt.js 路由管理&#xff1a;useRouter 方法与路由中间件应用 date: 2024/7/28 updated: 2024/7/28 author: cmdragon excerpt: 摘要&#xff1a;本文介绍了Nuxt 3中useRouter方法及其在路由管理和中间件应用中的功能。内容包括使用useRouter添加、移除路由&#xf…

Cesium高性能渲染海量矢量建筑

0、数据输入为类似Geojson的压缩文件和纹理图片&#xff0c;基于DrawCommand命令绘制&#xff1b; 1、自定义建筑几何&#xff0c;包括顶点、法线、纹理等&#xff1b; 2、自定义纹理贴图&#xff0c;包括按建筑高度贴图、mipmap多级纹理&#xff1b; 3、自定义批处理表&…

我的新书《Android系统多媒体进阶实战》正式发售了!!!

我的新书要正式发售了&#xff0c;把链接贴在下面&#xff0c;感兴趣的朋友可以支持下。 ❶发售平台&#xff1a;当当&#xff0c;京东&#xff0c;抖音北航社平台&#xff0c;小红书&#xff0c;b站 ❷目前当当和京东已开启预售 ❸当当网 https://u.dangdang.com/KIDHJ ❹…

22 B端产品经理与MySQL基本查询、排序(2)

MySQL基本常识 MySQL&#xff1a;一种关系型数据库管理系统。是按照数据结构来组织、存储和管理数据的仓库。 数据库&#xff1a;是一些关联数据表的集合。 数据表&#xff1a;表是数据的矩阵&#xff0c;看起来像电子表格&#xff0c;如下图&#xff1a;user表和admin表。 …

⌈ 传知代码 ⌋ 红外小目标检测

&#x1f49b;前情提要&#x1f49b; 本文是传知代码平台中的相关前沿知识与技术的分享~ 接下来我们即将进入一个全新的空间&#xff0c;对技术有一个全新的视角~ 本文所涉及所有资源均在传知代码平台可获取 以下的内容一定会让你对AI 赋能时代有一个颠覆性的认识哦&#x…

keil5导入程序到stm32的开发板

如图&#xff0c; 1&#xff0c;安装mdk_514.exe 2&#xff0c;安装Keil.STM32F1xx_DFP.1.0.5.pack 3&#xff0c;注册方法&#xff08;仅限学生使用&#xff09;&#xff1a;http://www.openedv.com/thread-69384-1-1.html 点击keil程序的上面魔法棒&#xff0c; 在device中…

类中的function无法正确被matlab所识别,该怎么操作呢?

&#x1f3c6;本文收录于《CSDN问答解惑-专业版》专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收…