当前位置:网站首页>模拟卷Leetcode【普通】150. 逆波兰表达式求值
模拟卷Leetcode【普通】150. 逆波兰表达式求值
2022-07-29 05:39:00 【邂逅模拟卷】
汇总:模拟卷Leetcode 题解汇总
150. 逆波兰表达式求值
根据 逆波兰表示法,求表达式的值。
有效的算符包括 +、-、*、/ 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。
注意 两个整数之间的除法只保留整数部分。
可以保证给定的逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。
示例 1:
输入:tokens = [“2”,“1”,“+”,“3”,“*”]
输出:9
解释:该算式转化为常见的中缀算术表达式为:((2 + 1) * 3) = 9
示例 2:
输入:tokens = [“4”,“13”,“5”,“/”,“+”]
输出:6
解释:该算式转化为常见的中缀算术表达式为:(4 + (13 / 5)) = 6
示例 3:
输入:tokens = [“10”,“6”,“9”,“3”,“+”,“-11”,““,”/“,””,“17”,“+”,“5”,“+”]
输出:22
解释:该算式转化为常见的中缀算术表达式为:
((10 * (6 / ((9 + 3) * -11))) + 17) + 5
= ((10 * (6 / (12 * -11))) + 17) + 5
= ((10 * (6 / -132)) + 17) + 5
= ((10 * 0) + 17) + 5
= (0 + 17) + 5
= 17 + 5
= 22
提示:
1 <= tokens.length <= 104
tokens[i] 是一个算符(“+”、“-”、“*” 或 “/”),或是在范围 [-200, 200] 内的一个整数
逆波兰表达式:
逆波兰表达式是一种后缀表达式,所谓后缀就是指算符写在后面。
平常使用的算式则是一种中缀表达式,如 ( 1 + 2 ) * ( 3 + 4 ) 。
该算式的逆波兰表达式写法为 ( ( 1 2 + ) ( 3 4 + ) * ) 。
逆波兰表达式主要有以下两个优点:
去掉括号后表达式无歧义,上式即便写成 1 2 + 3 4 + * 也可以依据次序计算出正确结果。
适合用栈操作运算:遇到数字则入栈;遇到算符则取出栈顶两个数字进行计算,并将结果压入栈中
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/evaluate-reverse-polish-notation
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
代码:
from leetcode_python.utils import *
class Solution:
def evalRPN(self, tokens: List[str]) -> int:
stack = []
for x in tokens:
if x in '+-*/':
b = stack.pop(-1)
a = stack.pop(-1)
stack.append(int(eval(f"{
a}{
x}{
b}")))
else:
stack.append(x)
return int(stack[0])
def test(data_test):
s = Solution()
data = data_test # normal
# data = [List2Node(data_test[0])] # list转node
return s.evalRPN(*data)
def test_obj(data_test):
result = [None]
obj = Solution(*data_test[1][0])
for fun, data in zip(data_test[0][1::], data_test[1][1::]):
if data:
res = obj.__getattribute__(fun)(*data)
else:
res = obj.__getattribute__(fun)()
result.append(res)
return result
if __name__ == '__main__':
datas = [
[["10","6","9","3","+","-11","*","/","*","17","+","5","+"]],
]
for data_test in datas:
t0 = time.time()
print('-' * 50)
print('input:', data_test)
print('output:', test(data_test))
print(f'use time:{
time.time() - t0}s')
备注:
GitHub:https://github.com/monijuan/leetcode_python
CSDN汇总:模拟卷Leetcode 题解汇总
可以加QQ群交流:1092754609
leetcode_python.utils详见汇总页说明
先刷的题,之后用脚本生成的blog,如果有错请留言,我看到了会修改的!谢谢!
边栏推荐
- Why does 5g N2 interface control plane use SCTP protocol?
- 说一下 TCP/IP 协议?以及每层的作用?
- Shallow reading of reentrantlock source code of abstractqueuedsynchronizer (AQS)
- ECCV 2022丨轻量级模型架ParC-Net 力压苹果MobileViT代码和论文下载
- Difference between CNAME record and a record
- Embedding理解+代码
- 模拟卷Leetcode【普通】081. 搜索旋转排序数组 II
- SQL developer graphical window to create database (tablespace and user)
- 基于噪声伪标签和对抗性学习的医学图像分割注释有效学习
- AbstractQueuedSynchronizer(AQS)之 ReentrantLock 源码浅读
猜你喜欢
【冷冻电镜|论文阅读】emClarity:用于高分辨率冷冻电子断层扫描和子断层平均的软件
LDAP简述及统一认证说明
竣达技术 | 适用于”日月元”品牌UPS微信云监控卡
C language memory stack and heap usage
ECCV 2022丨轻量级模型架ParC-Net 力压苹果MobileViT代码和论文下载
【经验】通过跳板机远程连接内网服务器的相关配置
Hongke shares | testing and verifying complex FPGA design (2) -- how to perform global oriented simulation in IP core
新同事写了几段小代码,把系统给搞崩了,被老板爆怼一顿!
JMM 内存模型概念
CNN convolutional neural network
随机推荐
ping 原理
finally 和 return 的执行顺序
The difference between pairs and ipairs
分享一些你代码更好的小建议,流畅编码提搞效率
Software definition boundary SDP
'function VTable for error: undefined reference to... 'cause and solution of the problem
Unity探索地块通路设计分析 & 流程+代码具体实现
PhantomReference 虚引用代码演示
CNN convolutional neural network
API for using the new date class of instant
王树尧老师运筹学课程笔记 10 线性规划与单纯形法(关于检测数与退化的讨论)
CDM—码分复用(简单易懂)
【讲座笔记】如何在稀烂的数据中做深度学习?
吴恩达老师机器学习课程笔记 01 引言
STP spanning tree principle and example of election rules
王树尧老师运筹学课程笔记 07 线性规划与单纯形法(标准型、基、基解、基可行解、可行基)
NeuralCF-神经协同过滤网络
【flask入门系列】Flask-SQLAlchemy的安装与配置
Teacher wangshuyao's notes on operations research 01 guidance and introduction
5G服务化接口和参考点