192 - 224 基本计算器

题目

实现一个基本的计算器来计算一个简单的字符串表达式的值。

字符串表达式可以包含左括号 ( ,右括号 ),加号 + ,减号 -,非负整数和空格 。

示例 1:

输入: "1 + 1" 输出: 2

示例 2:

输入: " 2-1 + 2 " 输出: 3

示例 3:

输入: "(1+(4+5+2)-3)+(6+8)" 输出: 23

说明:

  • 你可以假设所给定的表达式都是有效的。

  • 请不要使用内置的库函数 eval。

解答

和2相比,没了乘除,只有加减和括号

https://leetcode.com/problems/basic-calculator/discuss/62361/Iterative-Java-solution-with-stack

class Solution:
    def calculate(self, s: str) -> int:
        stack, number, result, sign = [], 0, 0, 1
        for c in s:
            if c.isdigit():
                number = (number * 10) + int(c)
            elif c in ["-", "+"]:
                result += sign*number
                number = 0
                sign = 1 if c == "+" else -1
            elif c == "(":
                stack.append(result)
                stack.append(sign)
                result = 0
                sign = 1
            elif c == ")":
                result += sign*number
                number = 0
                result *= stack.pop()
                result += stack.pop()
        if number != 0:
            result += sign*number
        return result

Runtime: 72 ms, faster than 89.53% of Python3 online submissions for Basic Calculator.

Memory Usage: 14 MB, less than 7.14% of Python3 online submissions for Basic Calculator.

Last updated

Was this helpful?