题解 | #表达式求值#
表达式求值
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]