【python】Leetcode每日一题-逆波兰表达式求值
【python】Leetcode每日一题-逆波兰表达式求值
【题目描述】
根据 逆波兰表示法,求表达式的值。
有效的算符包括 +、-、*、/ 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。
说明:
整数除法只保留整数部分。
给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 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 + 2 ) * ( 3 + 4 )。
- 该算式的逆波兰表达式写法为 ( ( 1 2 + ) ( 3 4 + ) * )。
逆波兰表达式主要有以下两个优点:
- 去掉括号后表达式无歧义,上式即便写成 1 2 + 3 4 + *也可以依据次序计算出正确结果。
- 适合用栈操作运算:遇到数字则入栈;遇到算符则取出栈顶两个数字进行计算,并将结果压入栈中。
提示:
1 <= tokens.length <= 104
tokens[i] 要么是一个算符("+"、"-"、"*" 或 "/"),要么是一个在范围 [-200, 200] 内的整数
【分析】
- 大一数据结构-栈-的例题,遵循 - 数字则进栈,字符则出栈两个数字的规则即可。- AC代码: - class Solution(object):
 def evalRPN(self, tokens):
 """
 :type tokens: List[str]
 :rtype: int
 """
 stack = []
 m = n = 0
 for x in tokens:
 if(x == "+" or x == "-" or x == "*" or x == "/"):
 n = stack.pop()
 m = stack.pop()
 if x == "+":
 x = m + n
 elif x == "-":
 x = m - n
 elif x == "*":
 x = m * n
 else:
 x = int(m / n)
 stack.append(x)
 else:
 stack.append(int(x, 10))
 return stack.pop()
 
- 看了很多评论,见到一个很可取的: - lambda表达式 +- maps映射- class Solution:
 def evalRPN(self, tokens: List[str]) -> int:
 f1 = lambda a,b:a+b
 f2 = lambda a,b:a-b
 f3 = lambda a,b:a*b
 f4 = lambda a,b:int(a/b)
 maps = {'+':f1,'-':f2,'*':f3,'/':f4}
 stack = []
 for i in tokens:
 if i in maps:
 a = stack.pop()
 b = stack.pop()
 stack.append(maps[i](b,a))
 else:
 i = int(i)
 stack.append(i)
 return stack[-1]
 
【python】Leetcode每日一题-逆波兰表达式求值的更多相关文章
- LeetCode 150. 逆波兰表达式求值(Evaluate Reverse Polish Notation) 24
		150. 逆波兰表达式求值 150. Evaluate Reverse Polish Notation 题目描述 根据逆波兰表示法,求表达式的值. 有效的运算符包括 +, -, *, /.每个运算对象 ... 
- lintcode 中等题:Evaluate Reverse Polish notation逆波兰表达式求值
		题目 逆波兰表达式求值 在逆波兰表达法中,其有效的运算符号包括 +, -, *, / .每个运算对象可以是整数,也可以是另一个逆波兰计数表达. 样例 ["2", "1&q ... 
- LeetCode:逆波兰表达式求值【150】
		LeetCode:逆波兰表达式求值[150] 题目描述 根据逆波兰表示法,求表达式的值. 有效的运算符包括 +, -, *, / .每个运算对象可以是整数,也可以是另一个逆波兰表达式. 说明: 整数除 ... 
- leetcode算法学习----逆波兰表达式求值(后缀表达式)
		下面题目是LeetCode算法:逆波兰表达式求值(java实现) 逆波兰表达式即后缀表达式. 题目: 有效的运算符包括 +, -, *, / .每个运算对象可以是整数,也可以是另一个逆波兰表达式.同 ... 
- Leetcode 150.逆波兰表达式求值
		逆波兰表达式求值 根据逆波兰表示法,求表达式的值. 有效的运算符包括 +, -, *, / .每个运算对象可以是整数,也可以是另一个逆波兰表达式. 说明: 整数除法只保留整数部分. 给定逆波兰表达式总 ... 
- Java实现 LeetCode 150 逆波兰表达式求值
		150. 逆波兰表达式求值 根据逆波兰表示法,求表达式的值. 有效的运算符包括 +, -, *, / .每个运算对象可以是整数,也可以是另一个逆波兰表达式. 说明: 整数除法只保留整数部分. 给定逆波 ... 
- 代码随想录第十三天 | 150. 逆波兰表达式求值、239. 滑动窗口最大值、347.前 K 个高频元素
		第一题150. 逆波兰表达式求值 根据 逆波兰表示法,求表达式的值. 有效的算符包括 +.-.*./ .每个运算对象可以是整数,也可以是另一个逆波兰表达式. 注意 两个整数之间的除法只保留整数部分. ... 
- SDIBT2666——逆波兰表达式求值
		逆波兰表达式求值(栈和队列) Description 从键盘上输入一个逆波兰表达式,用伪码写出其求值程序.规定:逆波兰表达式的长度不超过一行,以@符作为输入结束,操作数之间用空格分隔,操作符只可能有+ ... 
- CH BR4思考熊(恒等有理式-逆波兰表达式求值)
		恒等有理式 总时限 10s 内存限制 256MB 出题人 fotile96 提交情况 4/43 描述 给定两个有理式f(X)与g(X),判断他们是否恒等(任意A,如果f(A)与g(A)均有定义,那么f ... 
随机推荐
- 超详细Linux新手快速入门(一)——Linux的介绍安装以及虚拟机的介绍安装
			一.Linux的介绍 1.Linux和Windows的比较 Linux是一款操作系统,其性能稳定,因其防火墙组件高效安全.简单易配置,所以获得了追求速度和安全的一些企业和人群的青睐.与我们日常所熟知 ... 
- Cookie实现记住密码、自动登录
			前端代码 <form id="form" action="xxx" method="post"> <div> < ... 
- 回顾反射机制Method
			package com.demo.service; public interface SayHello { void sayHello(String name); } 接口实现类 package co ... 
- 前端生成分享海报兼容H5和小程序
			### 移动端分享海报生成 最近做项目需求是生成商品分享海报,并且保存到手机中要兼容H5和小程序<br> 与后端同学沟通后,海报在前端生成最省性能和有较好的交互体验,先看做好的效果 
- Android 之 TableLayout 布局详解
			TableLayout简介 •简介 Tablelayout 类以行和列的形式对控件进行管理,每一行为一个 TableRow 对象,或一个 View 控件. 当为 TableRow 对象时,可在 Tab ... 
- OO_Unit1_Summary
			经历了十分充实(痛不欲生)的三周不一样的码代码的生活,让我对通宵oo有了新的认识.往届学长学姐诚不欺我 第一次作业 需求分析 第一次需求非常简单(相比较后两次作业而言),仅为简单多项式求导,而且仅包含 ... 
- 利用查询条件对象,在Asp.net Web API中实现对业务数据的分页查询处理
			在Asp.net Web API中,对业务数据的分页查询处理是一个非常常见的接口,我们需要在查询条件对象中,定义好相应业务的查询参数,排序信息,请求记录数和每页大小信息等内容,根据这些查询信息,我们在 ... 
- 自动化kolla-ansible部署ubuntu20.04+openstack-victoria之镜像制作ubuntu16.04-16
			自动化kolla-ansible部署ubuntu20.04+openstack-victoria之镜像制作ubuntu16.04-16 欢迎加QQ群:1026880196 进行交流学习 制作Ope ... 
- Android+Java Web+MySQL实现登录注册
			1 前言&概述 这篇文章是基于此处文章的更新,更新了一些技术栈,更加贴近实际需要,以及修复了若干的错误. 这是一个前端Android+后端Java/Kotlin通过Servelt进行后台数据库 ... 
- Day16_98_IO_一边读一边写
			一边读一边写 import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutp ... 
