题目
给定一个包含正整数、加(+)、减(-)、乘()、除(/)的算数表达式(括号除外),计算其结果。
表达式仅包含非负整数,+, - ,,/ 四种运算符和空格 。 整数除法仅保留整数部分。
示例:
输入: "3+2*2"
输出: 7
输入: " 3+5 / 2 "
输出: 5
分析: 通过栈实现运算,对于遇到“+”则将或者“-”则将数字入栈,遇到“*”或者“/”则将栈顶的数字出栈运算,之后运算的结果入栈,创建一个变量用来记录当前运算符号的前一个运算符,最后将栈中的数字累加即可
class Solution:
def calculate(self, s: str) -> int:
stack = []
symbol_list = ["+", "-", "*", "/"]
pre_symbol = "+"
num = 0
for i in range(len(s)):
if s[i].isdigit() and s[i] != " ":
num = num*10+int(s[i])
if s[i] in symbol_list or i == len(s)-1:
if pre_symbol == "+":
stack.append(num)
elif pre_symbol == "-":
stack.append(-1*num)
elif pre_symbol == '*':
stack.append(stack.pop()*num)
elif pre_symbol == "/":
stack.append(int(stack.pop()/num))
pre_symbol = s[i]
num = 0
return sum(stack)