当前位置: 首页 > news >正文

leetcode 3484. 设计电子表格 中等

电子表格是一个网格,它有 26 列(从 'A' 到 'Z')和指定数量的 rows。每个单元格可以存储一个 0 到 10^5 之间的整数值。

请你实现一个 Spreadsheet 类:

  • Spreadsheet(int rows) 初始化一个具有 26 列(从 'A' 到 'Z')和指定行数的电子表格。所有单元格最初的值都为 0 。
  • void setCell(String cell, int value) 设置指定单元格的值。单元格引用以 "AX" 的格式提供(例如,"A1""B10"),其中字母表示列(从 'A' 到 'Z'),数字表示从 1 开始的行号。
  • void resetCell(String cell) 重置指定单元格的值为 0 。
  • int getValue(String formula) 计算一个公式的值,格式为 "=X+Y",其中 X 和 Y 要么 是单元格引用,要么非负整数,返回计算的和。

注意: 如果 getValue 引用一个未通过 setCell 明确设置的单元格,则该单元格的值默认为 0 。

示例 1:

输入:
["Spreadsheet", "getValue", "setCell", "getValue", "setCell", "getValue", "resetCell", "getValue"]
[[3], ["=5+7"], ["A1", 10], ["=A1+6"], ["B2", 15], ["=A1+B2"], ["A1"], ["=A1+B2"]]

输出:
[null, 12, null, 16, null, 25, null, 15]

解释

Spreadsheet spreadsheet = new Spreadsheet(3); // 初始化一个具有 3 行和 26 列的电子表格
spreadsheet.getValue("=5+7"); // 返回 12 (5+7)
spreadsheet.setCell("A1", 10); // 设置 A1 为 10
spreadsheet.getValue("=A1+6"); // 返回 16 (10+6)
spreadsheet.setCell("B2", 15); // 设置 B2 为 15
spreadsheet.getValue("=A1+B2"); // 返回 25 (10+15)
spreadsheet.resetCell("A1"); // 重置 A1 为 0
spreadsheet.getValue("=A1+B2"); // 返回 15 (0+15)

提示:

  • 1 <= rows <= 10^3
  • 0 <= value <= 10^5
  • 公式保证采用 "=X+Y" 格式,其中 X 和 Y 要么是有效的单元格引用,要么是小于等于 105 的 非负 整数。
  • 每个单元格引用由一个大写字母 'A' 到 'Z' 和一个介于 1 和 rows 之间的行号组成。
  • 总共 最多会对 setCellresetCell 和 getValue 调用 10^4 次。

分析:按照要求模拟即可。

typedef struct {int rows;int **sheet;
} Spreadsheet;Spreadsheet* spreadsheetCreate(int rows) {Spreadsheet * s=(Spreadsheet*)malloc(sizeof(Spreadsheet));s->rows=rows;s->sheet=(int**)malloc(sizeof(int*)*(rows+5));for(int i=0;i<=rows;++i){s->sheet[i]=(int*)malloc(sizeof(int)*30);for(int j=0;j<30;++j)s->sheet[i][j]=0;}return s;
}void spreadsheetSetCell(Spreadsheet* obj, char* cell, int value) {int ind1=0,ind2=0;for(int i=0;cell[i];++i){if(!i)ind1=cell[i]-'A'+1;else ind2=ind2*10+cell[i]-'0';}// printf("set ind1=%d ind2=%d val=%d\n",ind1,ind2,value);obj->sheet[ind2][ind1]=value;return;
}void spreadsheetResetCell(Spreadsheet* obj, char* cell) {int ind1=0,ind2=0;for(int i=0;cell[i];++i){if(!i)ind1=cell[i]-'A'+1;else ind2=ind2*10+cell[i]-'0';}// printf("reset ind1=%d ind2=%d\n",ind1,ind2);obj->sheet[ind2][ind1]=0;return;
}int spreadsheetGetValue(Spreadsheet* obj, char* formula) {int ind1=0,ind2=0,ind3=0,ind4=0,sum=0,f1=0,f2=0,i=0;for(i=1;formula[i];++i){if(formula[i]>='A'&&formula[i]<='Z')ind1=formula[i]-'A'+1,f1=1;else if(formula[i]=='+')break;else if(f1)ind2=ind2*10+formula[i]-'0';else ind2=ind2*10+formula[i]-'0';}i++;for(i;formula[i];++i){if(formula[i]>='A'&&formula[i]<='Z')ind3=formula[i]-'A'+1,f2=1;else if(f2)ind4=ind4*10+formula[i]-'0';else ind4=ind4*10+formula[i]-'0';}// printf("ind1=%d ind2=%d val1=%d ind3=%d ind4=%d val2=%d\n",ind1,ind2,obj->sheet[ind1][ind2],ind3,ind4,obj->sheet[ind3][ind4]);// printf("f1=%d f2=%d\n",f1,f2);if(f1)sum+=obj->sheet[ind2][ind1];else sum+=ind2;if(f2)sum+=obj->sheet[ind4][ind3];else sum+=ind4;return sum;
}void spreadsheetFree(Spreadsheet* obj) {for(int i=0;i<obj->rows;++i)free(obj->sheet[i]);free(obj);
}/*** Your Spreadsheet struct will be instantiated and called as such:* Spreadsheet* obj = spreadsheetCreate(rows);* spreadsheetSetCell(obj, cell, value);* spreadsheetResetCell(obj, cell);* int param_3 = spreadsheetGetValue(obj, formula);* spreadsheetFree(obj);
*/

http://www.dtcms.com/a/390418.html

相关文章:

  • Docker+cpolar 实战:打造灵活可控的远程办公系统
  • uniApp开发XR-Frame微信小程序 | 设置透明贴图
  • M3 Ultra版Mac Studio无法正常升级到macOS 26.0 苹果已经在调查
  • 老的ios项目在新的mac M1上编译运行遇到的问题及整理
  • Java 大视界 -- Java 大数据机器学习模型在元宇宙虚拟场景智能交互中的关键技术
  • 2025年目标检测还有什么方向好发论文?
  • 离线openHarmonySdk鸿蒙系统动态库的封装
  • 从零实现鸿蒙智能设备数据采集:权限、传感器、云端上传全流程实战
  • 智慧医院IBMS中央集成系统解决方案:构建医疗安全优先的智慧运营中枢​
  • ✅ Python房源数据采集+分析+预测平台 requests爬虫+sklearn回归 大数据实战项目(建议收藏)机器学习(附源码)
  • 结婚证 OCR 识别:政务服务提速的 “关键一环”
  • Git企业开发--多人协作
  • 【论文阅读 | IF 2025 | IF-USOD:用于水下显著目标检测的多模态信息融合交互式特征增强架构】
  • 【14/20】安全强化:HTTPS 和率限制在 Express 中的应用,实现防护机制
  • C#调用钉钉API实现安全企业内部通知推送
  • MyBatis与MyBatis-Plus区别
  • 数据血缘探秘:用SQL串联不同数据源的脉络
  • 多线程程序性能优化:缓存命中率与伪共享深度剖析
  • Spring Boot支持哪些类型的自定义配置文件?
  • uniapp:scss变量使用方法
  • postman接口测试系列: 时间戳和加密
  • 模型蒸馏demo
  • 【JVM】Java中有哪些垃圾回收算法?
  • 为何楼宇自控系统日益受欢迎?解析其兴起的核心动因
  • ASP.NET Core RazorPages/MVC/Blazor/Razor/WebApi概念记录说明
  • .NET Core 中 RabbitMQ 和 MassTransit 的使用
  • 使用QT进行3D开发建模
  • 阿里云开源DeepResearch:轻量化AI推理框架技术解析与实践指南
  • Visual Studio 2026 Insiders 重磅发布:AI 深度集成、性能飞跃、全新设计
  • 大模型初识(基础模型 业务集成+智能体Agent+Prompt提示词优化)