题目链接:https://leetcode-cn.com/problems/basic-calculator/
难度:困难

描述:
给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。

提示:

  1. 字符串长度:[1, 300000]
  2. s由数字'('')''+''-'' '组成
  3. s是一个有效的表达式
  4. +-是二元运算符

题解

  1. class Solution(object):
  2. def calculate(self, s):
  3. res, num, sign = 0, 0, 1
  4. stack = []
  5. for c in s:
  6. if c.isdigit():
  7. num = 10 * num + int(c)
  8. elif c == "+" or c == "-":
  9. res += sign * num
  10. num = 0
  11. sign = 1 if c == "+" else -1
  12. elif c == "(":
  13. stack.append(res)
  14. stack.append(sign)
  15. res = 0
  16. sign = 1
  17. elif c == ")":
  18. res += sign * num
  19. num = 0
  20. res *= stack.pop()
  21. res += stack.pop()
  22. res += sign * num
  23. return res