
解题思路
这里用栈能够很巧妙的解决这道题。
- 创建变量
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)