這題也是計算機的題目,跟前一題的差別在於,這次的式子有包含加減乘除,但是沒有括號
所以相對於第 224 題,這是比較簡單一些的題目(因此只有 Medium)
與上一題一樣,這題也會遍歷整個式子後,將式子中的 digit 與 sign 還有空格分別處理
最後所有的計算結果都已經在 stack 內了,所以就可以把所有的值拿出來即為所求
class Solution:
def calculate(self, s: str) -> int:
num, sign, stack = 0, "+", []
# s = s.strip()
for i in range(len(s)):
c = s[i]
if c.isdigit():
num = num * 10 + int(c)
if c in ['+','-','*','/'] or len(s) - 1 == i:
# 遇到當前符號,才去計算前一個符號的結果是什麼
if sign == '+':
stack.append(num)
elif sign == '-':
stack.append(num * -1)
elif sign == '*':
stack.append(num * stack.pop())
elif sign == '/':
curr = stack.pop()
curr = abs(curr)//num * -1 if curr < 0 else curr // num
stack.append(curr)
# 記下當前符號
sign = c
# num 歸零
num = 0
res = 0
for n in stack:
res += n
return res