# Time: O(n) # Space: O(n) # # Implement a basic calculator to evaluate a simple expression string. # # The expression string may contain open ( and closing parentheses ), # the plus + or minus sign -, non-negative integers and empty spaces . # # You may assume that the given expression is always valid. # # Some examples: # "1 + 1" = 2 # " 2-1 + 2 " = 3 # "(1+(4+5+2)-3)+(6+8)" = 23 # try: xrange # Python 2 except NameError: xrange = range # Python 3 class Solution: # @param {string} s # @return {integer} def calculate(self, s): operands, operators = [], [] operand = "" for i in reversed(xrange(len(s))): if s[i].isdigit(): operand += s[i] if i == 0 or not s[i-1].isdigit(): operands.append(int(operand[::-1])) operand = "" elif s[i] == ')' or s[i] == '+' or s[i] == '-': operators.append(s[i]) elif s[i] == '(': while operators[-1] != ')': self.compute(operands, operators) operators.pop() while operators: self.compute(operands, operators) return operands[-1] def compute(self, operands, operators): left, right = operands.pop(), operands.pop() op = operators.pop() if op == '+': operands.append(left + right) elif op == '-': operands.append(left - right)