题解 | #表达式求值#

表达式求值

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]

全部评论

相关推荐

04-14 20:10
已编辑
门头沟学院 Java
点赞 评论 收藏
分享
learYuan:🐕看了都摇头
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务