题解 | #表达式求值#
表达式求值
https://www.nowcoder.com/practice/c215ba61c8b1443b996351df929dc4d4
class Solution:
def solve(self , s: str) -> int:
# write code here
stack = []
res = 0
num= 0
i = 0
sign = '+'
while i < len(s):
# 处理空格
if s[i] == ' ':
i += 1
continue
if s[i] == '(':
end = i + 1
lens = 1
# 处理括号
while lens > 0:
if s[end] == '(':
lens += 1
if s[end] == ')':
lens -= 1
end += 1
num = self.solve(s[i+1:end-1])
i = end - 1
continue
# 获取数字
if '0' <= s[i] <= '9':
num = num*10 + int(s[i])
# 获取符号并计算
if not '0' <= s[i] <= '9' or i == len(s) - 1:
if sign == '+':
stack.append(num)
elif sign == '-':
stack.append(-num)
elif sign == '*':
stack.append(stack.pop()*num)
num = 0
sign = s[i]
i += 1
# 获得最终结果
while stack:
res += stack.pop()
return res
解题思路
- 先处理空格;
- 再处理括号;
- 获取数字;
- 获取符号并计算;
- 最后将栈内元素全部加起来,得到最终的结果。
复杂度
时间复杂度和空间复杂度都为O(N)。

