前往此题

解题思路

这里用栈能够很巧妙的解决这道题。

  • 创建变量stack来负责存储字符串中的数值以及运算结果
  • 创建变量preSign来存储运算符+-*/

算法过程

  1. 遍历字符串, 将数字赋值给临时变量num
  2. 如果遇到运算符再进行逐一判断
    1. 遇到+: 将num放入栈stack
    2. 遇到-: 将num以负数的形式放入栈stack
    3. 遇到*: 由于先乘除的特性,先运算栈尾 * num,在将运算结果放入栈中
    4. 遇到/: 同上将栈尾 / num的结果放入栈中
  3. 最后返回栈中的总和即可

代码

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)