题目描述(中等难度)

基础计算器,只有加减乘除,正数,整数。

思路分析

已经介绍了两种通用的计算器的解法,一种是利用后缀表达式,一种是双栈,这里就直接在 224 题 的基础上改了,大家可以先去做一下。

解法一 后缀表达式

已经写了后缀表达式的求值,这里的话我们主要是写中缀表达式转后缀表达式,下边是规则。

1)如果遇到操作数,我们就直接将其加入到后缀表达式。

2)如果遇到左括号,则我们将其放入到栈中。

3)如果遇到一个右括号,则将栈元素弹出,将弹出的操作符加入到后缀表达式直到遇到左括号为止,接着将左括号弹出,但不加入到结果中。

5)如果我们读到了输入的末尾,则将栈中所有元素依次弹出。

这道题比较简单,不用考虑括号,只需要判断当前操作符和栈顶操作符的优先级。

下边是整体的代码,供参考。

解法二 双栈

规则如下。

  1. 使用两个栈, 用于存储操作数,stack1 用于存储操作符
  2. 从左往右扫描,遇到操作数入栈 stack0
  3. 如果遇到操作符高于栈顶操作符优先级,则直接入栈
  4. 遇到左括号,直接入栈 stack1
  5. 遇到右括号,则从 stack0 弹出两个元素,从 弹出一个操作符进行计算,并将结果加入到 stack0 中,重复这步直到遇到左括号

同样的不需要考虑括号,会变得更简单一些。

224 题 一样需要注意减法和除法,由于使用了栈,所以算的时候两个数字要反一下。

解法三

把减法、乘法、除法在遍历过程中将结果计算出来,最后将所有结果累加。

这道题的话只是抽离了计算器的一部分功能,只要学会了通用的方法,很快就能写出来。

添加好友一起进步~

如果觉得有帮助的话,可以点击 给一个 star 哦 ^^

如果想系统的学习数据结构和算法,强烈推荐一个我之前学过的课程,可以点击 这里 查看详情