class Solution: def calculate(self, s: str) -> int: stack = [0] # stack of partial results sign = 1 # current sign num = 0 for c in s: if c.isdigit(): num = num * 10 + int(c) elif c in "+-": stack[-1] += sign * num sign = 1 if c == "+" else -1 num = 0 elif c == "(": stack.extend([sign, 0]) # push sign, new partial sum sign, num = 1, 0 elif c == ")": stack[-1] += sign * num # finish inside number val = stack.pop() # current subtotal stack[-1] += stack.pop() * val sign, num = 1, 0 return stack[-1] + sign * num