# 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))
LeetCode 150.逆波兰表达式 Python题解
最新推荐文章于 2024-11-15 16:27:37 发布