224. 基本计算器
原始题目链接:https://leetcode.cn/problems/basic-calculator/
给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。
注意:不允许使用任何将字符串作为数学表达式计算的内置函数,比如 eval() 。
示例 1:
输入:s = “1 + 1”
输出:2
示例 2:
输入:s = " 2-1 + 2 "
输出:3
示例 3:
输入:s = “(1+(4+5+2)-3)+(6+8)”
输出:23
解题思路:
括号的操作使用递归解决,遇见左括号递归开始,遇见右括号,递归结束。其他操作和基本计算器II的处理是一样的。
代码实现:
class Solution:
def calculate(self, s: str) -> int:
def dfs(s, start):
stack = []
pre_flag = '+'
num = 0
i = start
while i < len(s):
c = s[i]
if c == ' ':
i += 1
continue
# 当前字符是左括号,递归开始
elif c == '(':
i, num = dfs(s, i+1)
# 当前字符是数字
elif c.isdigit():
num = num * 10 + int(c)
else:
if pre_flag == '+':
stack.append(num)
elif pre_flag == '-':
stack.append(-num)
# 当前字符是右括号,递归结束
if c == ')': break
pre_flag = c
num = 0
i += 1
return i, sum(stack)
# 字符串末尾加个哨兵
s += '$'
return dfs(s, 0)[1]
参考文献:
https://leetcode.cn/problems/basic-calculator/solution/li-kou-jia-jia-zhan-de-ying-yong-224-ji-10rkt/