LeetCode 150.逆波兰表达式 Python题解

# coding=utf-8
# Creator:Mr.Zhao
# Creation time:2023/6/12 21:36

"""
给你一个字符串数组 tokens,表示一个根据 逆波兰表示法 表示的算术表达式。
请你计算该表达式。返回一个表示表达式值的整数。
注意:
    有效的算符为 '+'、'-'、'*' 和 '/' 。
    每个操作数(运算对象)都可以是一个整数或者另一个表达式。
    两个整数之间的除法总是 向零截断 。
    表达式中不含除零运算。
    输入是一个根据逆波兰表示法表示的算术表达式。
    答案及所有中间计算结果可以用 32 位 整数表示。
"""
"""
这道题 其实思路很简单 
    就是用栈去模拟 如果遇到操作符号就弹出栈最后两个元素进行运算即可
    遇到非操作符号就加入进去即可    
"""
import math


class Solution:
    def evalRPN(self, tokens) -> int:
        stack_list = []
        operator_dic = ['+', '-', '*', '/']
        for i in tokens:
            if i in operator_dic and len(stack_list) >= 2:
                # 第一个出来的是右操作数
                right_num = stack_list.pop(-1)
                # 第二个出来的是左操作数
                left_num = stack_list.pop(-1)
                summ = eval(left_num + i + right_num)
                if i == "/" and summ < 0:
                    summ = math.ceil(summ)
                if i == "/" and summ > 0:
                    summ = math.floor(summ)
                if summ == 0.0:
                    summ = 0
                stack_list.append(str(summ))
            if i not in operator_dic:
                stack_list.append(i)
        return int(stack_list[-1])


a = Solution()
tokens = ["0", "3", "/"]
print(a.evalRPN(tokens))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值