题解 | #表达式求值#
表达式求值
https://www.nowcoder.com/practice/c215ba61c8b1443b996351df929dc4d4
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 返回表达式的值
# @param s string字符串 待计算的表达式
# @return int整型
#
class Solution:
def solve(self, s: str) -> int:
nums = []
ops = []
prec = {'+': 1, '-': 1, '*': 2, '/': 2, '(': 0}
i = 0
while i < len(s):
if s[i].isdigit():
num = 0
while i < len(s) and s[i].isdigit():
num = num * 10 + int(s[i])
i += 1
nums.append(num)
i -= 1
elif s[i] == '(':
ops.append(s[i])
elif s[i] == ')':
while ops and ops[-1] != '(':
b = nums.pop()
a = nums.pop()
op = ops.pop()
if op == '+':
nums.append(a + b)
elif op == '-':
nums.append(a - b)
elif op == '*':
nums.append(a * b)
elif op == '/':
nums.append(a // b if b != 0 else "除数不能为零") # Handle division by zero
ops.pop() # Pop the '('
elif s[i] in prec:
while ops and prec[s[i]] <= prec.get(ops[-1], 0):
b = nums.pop()
a = nums.pop()
op = ops.pop()
if op == '+':
nums.append(a + b)
elif op == '-':
nums.append(a - b)
elif op == '*':
nums.append(a * b)
elif op == '/':
nums.append(a // b if b != 0 else "除数不能为零") # Handle division by zero
ops.append(s[i])
i += 1
while ops:
b = nums.pop()
a = nums.pop()
op = ops.pop()
if op == '+':
nums.append(a + b)
elif op == '-':
nums.append(a - b)
elif op == '*':
nums.append(a * b)
elif op == '/':
nums.append(a // b if b != 0 else "除数不能为零") # Handle division by zero
return nums[0]
快手成长空间 763人发布
