题目描述:
读入一个只包含’+‘、’-‘、’*‘、’/‘的非负整数计算表达式,计算该表达式的值
解题思路:
- 将给定的中缀表达式转换为后缀表达式 计算后缀表达式
- 通过第一步得到的后缀表达式计算结果
步骤1:中缀表达式转后缀表示:
- 设立一个操作符栈,用于临时存放操作符。设立另一个list,存放后缀表达式
- 从左至右扫描表达式,如果碰到数,就把操作数加入到后缀表达式中(注意:数字可能不止一位,例如’234’,需要读入下一位然后进行合并)
- 若碰到操作符,就与当前操作符栈栈顶的操作符的优先级进行比较。1>若当前的操作符优先级高于栈顶操作符的优先级,则将当前的操作符压栈。2>若当前操作符的优先级小于或等于栈顶操作符的优先级,则将操作符栈中的栈顶操作符出栈,直到遇到优先级高于当前操作符的。
- 重复上述操作,直至扫描完表达式。
步骤2:
- 从左至右遍历后缀表达式,如果是操作数,就跳过,如果是操作符,则取出操作符之前的两个数字。注意两个数字的顺序,在减法跟除法中是有顺序的区别的。
- 当前计算的结果替换取出两个数字中的一个,弹出另一个和当前的操作符。
- 直至后缀表达式中只剩下一个元素的时候停止。
python代码如下
class Solution:
def Change(self, string):
priority = {
'+': 1, '-': 1, '*': 2, '/': 2} # 优先级,‘-’、‘+’为一类 ‘/’、‘*’为一类
suffix = []
operateList = []
curPtr = 0
while curPtr < len(string):