当前位置: 首页 > news >正文

力扣:150. 逆波兰表达式求值(Python3)

题目:

给你一个字符串数组 tokens ,表示一个根据 逆波兰表示法 表示的算术表达式。

请你计算该表达式。返回一个表示表达式值的整数。

注意:

  • 有效的算符为 '+''-''*' 和 '/' 。
  • 每个操作数(运算对象)都可以是一个整数或者另一个表达式。
  • 两个整数之间的除法总是 向零截断 。
  • 表达式中不含除零运算。
  • 输入是一个根据逆波兰表示法表示的算术表达式。
  • 答案及所有中间计算结果可以用 32 位 整数表示。

来源:力扣(LeetCode)
链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

示例:

示例 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.赋值顺序:赋值顺序是从左往右,例如num2, num1 = stack.pop(), stack.pop(),栈顶元素给num2,栈次顶元素给num1 。

2.str.startswith(prefix[, start[, end]])如果prefix在str中以start开头,以end结尾,返回结果为True,否则返回False,start默认值为0。

3.eval(expression[, globals[, locals]]):expression表示表达式;globals表示变量作用域,全局命名空间,如果被提供,则必须是一个字典对象;locals表示变量作用域,局部命名空间,如果被提供,可以是任何映射对象。例如:x=7,eval( '3 * x' ),输出21。

代码:

class Solution:def evalRPN(self, tokens: List[str]) -> int:stack = []for token in tokens:if token.isdigit() or token.startswith('-') and len(token) > 1:stack.append(token)else:num2, num1 = stack.pop(), stack.pop()stack.append(int(eval(str(num1) + token + str(num2))))return int(stack[0])

http://www.lryc.cn/news/218163.html

相关文章:

  • Tomcat运行日志乱码问题/项目用tomcat启动时窗口日志乱码
  • Leetcode—199.二叉树的右视图【中等】
  • 微信小程序如何跳转到外部小程序
  • ElasticSearch集群环境搭建
  • [架构之路-250/创业之路-81]:目标系统 - 纵向分层 - 企业信息化的呈现形态:常见企业信息化软件系统 - 企业内的数据与数据库
  • delaunay和voronoi图 人脸三角剖分
  • MySQL数据库之表的增删查改
  • (论文阅读11/100)Fast R-CNN
  • Git 标签(Tag)实战:打标签和删除标签的步骤指南
  • React 底层 Fiber 架构 简单理解
  • 使用 Python 进行自然语言处理第 4 部分:文本表示
  • 【LLM】大语言模型高效微调方案Lora||直击底层逻辑
  • Qt for Android代码中输出日志
  • 力扣刷题-二叉树-二叉树的递归遍历
  • VX-3R APRS发射试验
  • JAVA毕业设计109—基于Java+Springboot+Vue的宿舍管理系统(源码+数据库)
  • CMU/MIT/清华/Umass提出生成式机器人智能体RoboGen
  • STM32:AHT20温湿度传感器驱动程序开发
  • 【Linux】第七站:vim的使用以及配置
  • 汇编-算术运算符
  • 线性代数 第六章 二次型
  • leetCode 213. 打家劫舍 II + 动态规划 + 从记忆化搜索到递推 + 空间优化
  • 网络编程套接字(二)
  • [极客大挑战 2019]Knife 1(两种解法)
  • 国家统计局教育部各级各类学历教育学生情况数据爬取
  • mysql、clickhouse时间日期加法
  • 21.合并两个有序链表
  • thinkphp漏洞复现
  • 暴力递归转动态规划(十三)
  • java EE 进阶