思路
利用棧(stack)來保存進入括號前的計算狀態(包括當前計算結果和符號),以便在括號結束后正確恢復計算上下文。代碼通過遍歷字符串,識別數字、加號、減號和括號。遇到數字時構造完整數值;遇到加減號時將上一個數與符號累加到當前結果中,并更新符號;遇到左括號時將當前結果和符號壓棧,重置為括號內的新表達式;遇到右括號時將括號內結果乘以括號前符號并加到括號前的結果上。最終再將最后一個數加上,得到總結果。整個過程遵循從左到右、遇括號遞歸的求值邏輯。
class Solution:def calculate(self, s: str) -> int:stack=[] #來存放括號外的結果和符號result=0 #當前累計的計算結果number=0 #當前正在解析的數字sign=1 #當前數字前的符號for char in s:if char.isdigit():number=number*10+int(char)elif char=='+':result+=sign*numbernumber=0sign=1 #下一個數是正數elif char=='-':result+=sign*numbernumber=0sign=-1 #下一個是負數elif char=='(':stack.append(result)#保持當前計算狀態stack.append(sign) result=0sign=1elif char==')':result+=sign*numbernumber=0result*=stack.pop() #拿出來的是進入括號之前的signresult+=stack.pop() #拿上一個結果result+=sign*numberreturn result