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

leetcode刷题日记——基本计算器

[ 题目描述 ]:
在这里插入图片描述
[ 思路 ]:

  • 由于题目中只有加减运算,而减法运算可以看成加上一个负数
  • 那么我们只要弄清每个数的正负,然后将这些数求和,即可得到正确答案
  • 由题可以看到,负号后紧跟数字,则是负数,负号后跟的若是括号,则需要将括号中的数字的符号全部反转
  • 那么,难点就在于如何判断 - ( -( -() ) ),这种嵌套括号中数字的符号,尤其是 ’ ) ’ 后面的数的符号需要注意
  • 通过栈来实现符号处理问题,初始化栈顶符号为 ’ + ’
    • 当遇见 ’ ( ’ 时,将当前符号压入栈,因为这代表的他这个括号中的符号是否需要反转
    • 当遇见 ’ ( ’ 时,将栈顶符号弹出栈,因为该符号所表示的括号中的数已经处理完了
    • 当遇见 ’ + ’ 时,直接取栈顶符号
    • 当遇见 ’ - ’ 时,取栈顶符号的相反
  • 运行如下
    在这里插入图片描述
int calculate(char* s) {int len=strlen(s);int signs[len], top = 0,sign=1,res = 0,i=0;signs[top++] = sign;while (i < len) {if (s[i] == ' ') {i++;} else if (s[i] == '+') {sign = signs[top - 1];i++;} else if(s[i] == '-') {sign = -signs[top - 1];i++;} else if(s[i] == '(') {signs[top++] = sign;i++;} else if(s[i] == ')') {top--;i++;} else {long num = 0;while (i < len && s[i] >= '0' && s[i] <= '9') {num = num * 10 + s[i] - '0';i++;}res += sign * num;}}return res;
}

[ 官方题解 ]:

  • 方法一:括号展开 + 栈,基本同上

相关文章:

  • QML Date:日期处理示例
  • MIL、SIL、HIL与Back-to-Back测试详解:从模型到硬件的完整验证链
  • python怎么查看函数原型及变量是什么类型
  • [SystemVerilog] Clocking
  • 2软考系统架构设计师:第一章系统架构概述 - 练习题附答案及超详细解析
  • 基于libdxfrw库读取样条曲线并离散为点
  • DHCP配置文件详解
  • FreeRTOS事件标志组详解:高效的任务间通知机制
  • 区分PROJECT_SOURCE_DIR, CMAKE_SOURCE_DIR,CMAKE_CURRENT_SOURCE_DIR
  • windows下查看idea运行的进程占的JVM情况工具
  • Agent2Agent
  • 校平机:金属板材加工的核心设备
  • x86系列CPU寄存器和汇编指令总结
  • Kettle学习
  • VSCode远程登录云服务器并设置免密登录全攻略
  • LeetCode --- 446 周赛
  • 2.4.5goweb项目上传到csdn的git仓库
  • Eigen的主要类及其功能
  • 《数据库系统工程师》-B站-视频截图整理-2021-23
  • JavaScript原生实现简单虚拟列表(列表不定高)
  • CSR周刊:李宁打造世界地球日特别活动,珀莱雅发布2024年度可持续发展报告
  • 来论|如何看待韩企在美申请“饺子”专利
  • 江西省宁都县政协原二级调研员谢亦礼被查
  • 网络游戏用户规模和市场销售创新高,知识产权保护面临哪些挑战?
  • 政治局会议深读|首提“持续巩固房地产市场稳定态势”,楼市政策还有哪些优化空间
  • 这个器官健康的人,不容易得抑郁症