Basic Calculator

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-negativeintegers and empty spaces.

Example 1:

Input:
 "1 + 1"

Output:
 2

Example 2:

Input:
 " 2-1 + 2 "

Output:
 3

Example 3:

Input:
 "(1+(4+5+2)-3)+(6+8)"

Output:
 23

分析

带括号,所以每次相乘带sign,遇到括号把+1/-1sign压入,再压入前面result。遇到)就弹出站

class Solution:
    def calculate(self, s):
        """
        :type s: str
        :rtype: int
        """
        stack = []
        num = 0
        res = 0
        sign = 1
        for ii, i in enumerate(s):
            if i.isdigit():
                num = num * 10 + int(i)
            elif i == '+':                
                res += num * sign
                sign = 1
                num=0

            elif i == '-':               
                res += num * sign
                sign = -1
                num = 0

            elif i == '(':
                stack.append(res)
                stack.append(sign)
                res = 0
                sign = 1

            elif i == ')':                
                res += num * sign
                res = stack.pop() * res + stack.pop()
                num = 0

        if num:
            res += num * sign
        return res

Last updated