2025/3/5 【栈与队列】 LeetCode150.逆波兰表达式求值
知识点1:递归就是用栈来实现的。
知识点2:逆波兰表达式是用后序遍历的方式把二叉树序列化了。
知识点3:将字符串形式的数字转换为实际的数字(整数或浮点数)在Python中是非常直接的操作,可以使用内置函数int()
和float()
来实现。
知识点4:要将字符串中的运算符转化为能够执行实际计算作用的运算符,可以使用一个映射(如字典)将字符形式的运算符转换为实际可以调用的函数。如代码一。
解法:用栈操作运算,遇到数字则入栈;遇到算符则取出栈顶两个数字进行计算,并将结果压入栈中。
代码一:
class Solution: def evalRPN(self, tokens: List[str]) -> int: stack = [] eva = { '+': lambda x, y: x + y, '-': lambda x, y: x - y, '*': lambda x, y: x * y, '/': lambda x, y: x / y } for item in tokens: if item in eva.keys(): y = stack.pop() x = stack.pop() print(f"x, y{x, y}") num = eva[item](x, y) stack.append(int(num)) else: stack.append(int(item)) return stack[0]
代码二:代码随想录,考虑到了负数的情况
from operator import add, sub, mul
是 Python 中的一条导入语句,用于从 Python 内置的 operator
模块中导入三个函数:add
、sub
和 mul
。这些函数分别用于执行加法、减法和乘法操作。
-
truediv(a, b)
:对应除法/
。 -
floordiv(a, b)
:对应整除//
。
from operator import add, sub, mul def div(x, y): return x / y if x*y > 0 else -(abs(x) / abs(y)) class Solution: def evalRPN(self, tokens: List[str]) -> int: op_map = { '+' : add, '-' : sub, '*' : mul, '/' : div } stack = [] for token in tokens: if token in op_map.keys(): op2 = stack.pop() op1 = stack.pop() stack.append(int(op_map[token](op1, op2))) else: stack.append(int(token)) return stack.pop()
代码三:代码随想录。
可行,但因为使用eval()相对较慢的方法,eval()
可以将一个字符串形式的表达式转换为实际的 Python 表达式,并返回该表达式的计算结果。
class Solution: def evalRPN(self, tokens: List[str]) -> int: stack = [] for token in tokens: # 判断是否为数字,因为isdigit()不识别负数,故需要排除第一位的符号 if token.isdigit() or (len(token) > 1 and token[1].isdigit()): stack.append(token) print(token) else: op2 = stack.pop() op1 = stack.pop() # (op1 + token + op2)是字符串表达式,eval函数返回的是数值,所以需要str() stack.append(str(int(eval(op1 + token + op2)))) return int(stack.pop())
观点:做这一题学到了不少内置函数。int(), eval(), str(), from operator import add, sub, mul, truediv, floordiv, str.isdigit(), lambda 表达式,判断字符串内容是不是负数。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架