当前位置: 首页 > 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原生实现简单虚拟列表(列表不定高)
  • 长安汽车辟谣作为二级企业并入东风集团:将追究相关方责任
  • 吴清稳市场稳预期发布会十要点:谈平准基金、股市稳定、公募改革和巴菲特
  • 外交部回应西班牙未来外交战略:愿与之一道继续深化开放合作
  • 金价大反攻,国内金饰价格涨回千元,能否重返巅峰?
  • 发表“男性患子宫肌瘤”论文的杂志一年发文三千余篇,中介称可提供代写
  • 晒被子最大的好处,其实不是杀螨虫,而是……