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

计算器算法题

一、不带括号且没有负数参与运算的中缀表达式求值

227. 基本计算器 II - 力扣(LeetCode)

由于限制太多,逻辑不算难,所以没有必要把中缀表达式转成后缀表达式。

表达式特点:只有数字和运算符,所以数字之后一定是运算符。

直接处理的逻辑:一个栈存数据,一个变量存下一个数据之前的符号。

先循环读出字符串里面的一个数据,如果此时符号是+,直接入栈,如果是-,入栈数据的负数,如果是*,去除栈顶,两数相乘入栈,如果是/,去除栈顶,两数相除入栈(注意数据顺序),最后栈里面的数相加。

代码:

二、带括号,有负数参与的中缀表达式求值

224. 基本计算器 - 力扣(LeetCode)

由于限制太少,直接求难度太高,此时就要中缀转后缀求值(后缀求值也叫逆波兰表达式)

直接处理逻辑:

分割中缀表达式中的元素

中缀表达式转后缀表达式

后缀表达式计算

1、分割中缀表达式中的元素

逻辑:循环读出完整数据,尾插。其他符号按顺序尾插。得到分割中缀表达式的中缀字符串数组。

代码:

2、中缀表达式转后缀表达式

逻辑:

对于数据:直接插入后缀字符串数组 tmp

对于左括号:直接插入操作符栈 op

对于右括号:操作符栈 op 中元素一直出栈尾插到后缀字符串数组 tmp,直到栈顶是左括号,出栈但是不尾插(括号不会进入后缀字符串数组)

对于加减运算符:操作符栈 op 中元素一直出栈尾插到后缀字符串数组 tmp,直到栈空或出现左括号停止,最后再尾插加减运算符。注意:减号有可能是负号(如果减号出现在中缀字符串数组第一个或减号前面是左括号),此时要做的是先插入一个0,再执行上面逻辑。

对于乘除运算符:操作符栈 op 中元素一直出栈尾插到后缀字符串数组 tmp,直到栈空或出现左括号或出现加减号停止,最后再尾插乘除运算符。

最后尾插栈中的符号。

代码:

3、后缀表达式计算

逻辑:

遇到数据就入栈,遇到操作符就两次出栈计算后入栈,最后返回栈顶。

代码:


http://www.kler.cn/a/568812.html

相关文章:

  • Maven 与持续集成(CI)/ 持续部署(CD)(二)
  • EasyRTC:支持任意平台设备的嵌入式WebRTC实时音视频通信SDK解决方案
  • 前端正则表达式完全指南:从入门到实战
  • (贪心 合并区间)leetcode 56
  • 系统或软件的可靠性(Reliability)
  • 面试之《前端开发者需要关注哪些性能指标?》
  • 多元数据直观表示(R语言)
  • 如何学习人工智能(如Transformer架构和DeepSeek等)
  • 24、Java 集合
  • DOM HTML:深入理解与高效运用
  • 3月2日 C++日常习题测试一答案
  • 电商平台项目需求文档(精简版)
  • c#编程,使用 事件 编程入门
  • C++(Qt)软件调试---Windows 性能分析器WPA(28)
  • [KEIL]单片机技巧 01
  • 如何用生成式AI工具(如GitHub Copilot)提升编程效率:实战技巧与避坑指南
  • 场外个股期权有哪些交易策略?场外期权策略方向如何选择?
  • Java基础语法38(异常处理try-catch和throws)
  • 腾讯集团软件开发-后台开发方向内推
  • 常见报错及解决方案