解题思路
这里用栈能够很巧妙的解决这道题。
- 创建变量
stack
来负责存储字符串中的数值以及运算结果 - 创建变量
preSign
来存储运算符+-*/
算法过程
- 遍历字符串, 将数字赋值给临时变量
num
中 - 如果遇到运算符再进行逐一判断
- 遇到
+
: 将num
放入栈stack
中 - 遇到
-
: 将num
以负数的形式放入栈stack
中 - 遇到
*
: 由于先乘除的特性,先运算栈尾* num
,在将运算结果放入栈中 - 遇到
/
: 同上将栈尾 / num
的结果放入栈中
- 遇到
- 最后返回栈中的总和即可
代码
class Solution:
def calculate(self, s: str) -> int:
stack = []
po = '+'
num = 0
for i, each in enumerate(s):
if each.isdigit():
num = num * 10 + int(each)
if i == len(s) - 1 or each in '+-*/':
if po == '+': stack.append(num)
elif po == '-': stack.append(-num)
elif po == '*': stack.append(stack.pop() * num)
elif po == '/':
top = stack.pop()
if top < 0:
stack.append(int(top / num))
else:
stack.append(top // num)
po = each
num = 0
return sum(stack)