2020-12-02

题目描述
给定牛牛一个后缀表达式s,计算它的结果,例如,1+1对应的后缀表达式为1#1#+,‘#’作为操作数的结束符号。
其中,表达式中只含有‘+’、’-‘、’*‘三种运算,不包含除法。
本题保证表达式一定合法,且计算过程和计算结果的绝对值一定不会超过10^{18}10 18

在这里插入图片描述
使用栈来解决上述问题。遇到+ - * 就出栈。

class Solution:
    def solve(self , str ):
        stack = []
        last = 0
        if not str:
            return 0
        for i in str:
            if i >= "0" and i <= "9":  # 注意python不可以str-str来判断,cpp可以
                if last:
                    last_num = stack.pop()
                    stack.append(last_num * 10 + int(i))
                    last = 1
                else:
                    stack.append(int(i))
                    last = 1
            elif i == "#":
                last = 0
                continue
            else:
                if i == "-":
                    num2 = stack.pop()
                    num1 = stack.pop()
                    stack.append(num1 - num2)
                    last = 0
                elif i == "+":
                    num2 = stack.pop()
                    num1 = stack.pop()
                    stack.append(num1 + num2)
                    last = 0
                else:
                    num2 = stack.pop()
                    num1 = stack.pop()
                    stack.append(num1 * num2)
                    last = 0
        if len(stack) > 0:
            return stack[0]            
        else:
            return 0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值