【实战】ACM 选手图解 LeetCode 逆波兰表达式求值

本文通过图解和代码实现详细介绍了如何求解 LeetCode 150 题目——逆波兰表达式求值。逆波兰表达式是将运算符置于操作数之后的表示形式,适合使用栈进行计算。文章提供了 Python 和 Java 两种代码实现,并指出该问题的时间复杂度为 O(N),空间复杂度为 O(N)。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

大家好呀,我是帅蛋。

今天来做逆波兰表达式求值,可能臭宝们一看“逆波兰表达式”这个洋气的名字,下意识的会觉得难搞。

其实这个词只是看着唬人,就是纸老虎。

逆波兰表达式又叫后缀表达式,是将运算符写在操作数之后

像我们平时写的是类似 a + b 这种表达式,这叫中缀表达式,符合我们作为人的思维方式,而后波兰表达式则是写成 ab+。

简单说下为啥要弄个逆波兰表达式这个玩意。

原因就是从我们人的角度来看,简单的一批的中缀表达式,在计算机看来,简直是复杂的无与伦比,因为计算机普遍采用的是栈式结构,执行的是先入后出的操作,所以逆波兰式在它眼里才是个正常的娃儿

6516dc27be0d7ace8bb7985632b7a05

LeetCode 150:逆波兰表达式求值

题意

根据逆波兰表示法,求表达式的值。

有效算符包括 + - * /。运算对象可以是整数,可以是其他逆波兰表达式。

示例

输入:tokens = [“2”, “1”, “+”, “3”, “*”]

输出:9

解释:该算式转化为常见的中缀算术表达式为:((2 + 1) * 3) = 9

输入:tokens = [“4”,“13”,“5”,"/","+"]

输出:6

解释:该算式转化为常见的中缀算术表达式为:(4 + (13 / 5)) = 6

提示

整数除法只保留整数部分。

给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。

  • 1 <= tokens.length <= 104

  • tokens[i] 要么是一个算符("+"、"-"、"*" 或 “/”),要么是一个在范围 [-200, 200] 内的整数。

题目解析

水题,难度中等,感觉难度都堆在“逆波兰表达式”这几个字上。

逆波兰表达式主要有以下两个优点:

  • 去掉括号后表达式无歧义,上式即便写成 1 2 + 3 4 + * 也可以依据次序计算出正确结果。

  • 适合用栈操作运算:遇到数字则入栈;遇到算符则取出栈顶两个数字进行计算,并将结果压入栈中。

**在前面说了,逆波兰表达式为计算机这种思维而生,那这个逆波兰表达式求值显然也是用栈来解决。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值