227. Basic Calculator II
放進去 stack 的數字,如果都是正、負數的話,就可以直接加總,麻煩的是遇到乘、除要怎麼處理?
因為我們需要知道乘、除後面的數字,才可以處理,但是如果是一直接連的乘、除就沒有關係,因為接連的乘、除都是符合四則運算的。
所以每當我們處理完一個數字的時候,我們要注意這個數字前面是加減號,還是乘除號?sign
就是幫助我們紀錄當下處理完的這個數字,他前面的四則運算符號是什麼,一開始預設是正號就好。
所謂的「處理完」數字還有兩種情況
- 遇到了下一個四則運算符號
- 走到最後一位數字
所以當處理完當下的數字後,這個數字前面的四則運算符號如果是遇上加減,直接放入到 stack 就好,遇上減號記得取負。
當處理完當下的數字之後,如果前面的數字是乘、除號,我們就要再把再前面的一個數字取出來計算完畢後,重新放回 Stack 中。
最後的答案就是加總。
class Solution:
def calculate(self, s: str) -> int:
num, stack, sign = 0, [], "+"
for i in range(len(s)):
if s[i].isdigit():
num = num * 10 + int(s[i])
if s[i] in "+-*/" or i == len(s) - 1:
if sign == "+":
stack.append(num)
elif sign == "-":
stack.append(-num)
elif sign == "*":
stack.append(stack.pop()*num)
else:
stack.append(int(stack.pop()/num))
num = 0
sign = s[i]
return sum(stack)