【栈】【150. 逆波兰表达式求值】【中等】(需回顾)
根据逆波兰表示法,求表达式的值。
有效的运算符包括 +, -, *, / 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。
说明:
整数除法只保留整数部分。
给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。
示例 1:输入: ["2", "1", "+", "3", "*"]输出: 9解释: ((2 + 1) * 3) = 9示例 2:输入: ["4", "13", "5", "/", "+"]输出: 6解释: (4 + (13 / 5)) = 6示例 3:输入: ["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
来源:力扣(LeetCode) 链接:https://leetcode-cn.com
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
首先介绍一下前缀、中缀、后缀表达式。
中缀表达式:1 + (2 + 3) × 4 - 5前缀表达式:- + 1 × + 2 3 4 5后缀表达式:1 2 3 + 4 × + 5 -对计算机来说,计算前缀或后缀表达式的值非常简单
前缀表达式的计算机求值
- 从右至左扫描表达式
- 遇到数字时,将数字压入堆栈,遇到运算符时,弹出栈顶的两个数,用运算符对计算,将结果入栈
- 重复上述过程直到表达式最左端,最后运算得出的值即为表达式的结果
- 后缀表达式的计算机求值
- 从左至右扫描表达式
- 遇到数字时,将数字压入堆栈,遇到运算符时,弹出栈顶的两个数,用运算符对计算,将结果入栈
- 重复上述过程直到表达式最右端,最后运算得出的值即为表达式的结果
以下是前缀、中缀、后缀表达式详解
转载自:https://www.cnblogs.com/zzliu/p/10801113.html
个人题解:
利用栈存储深度值来依次计算
例 [“2”, “1”, “+”, “3”, “*”]
2 //数字2入栈21 //数字1入栈3 //2+1结果入栈33 //数字3入栈9 //3*3结果入栈
个人代码:(待优化版)
public int EvalRPN(string[] tokens) {if(tokens.Length==1)return int.Parse(tokens[0]);int sum = 0;Stack<int> stack = new Stack<int>();for (int i = 0; i < tokens.Length; i++){if(tokens[i]=="+"){int a = stack.Pop();int b = stack.Pop();sum =b+a;stack.Push(sum);}else if(tokens[i]=="-"){int a = stack.Pop();int b = stack.Pop();sum =b-a;stack.Push(sum);}else if(tokens[i]=="*"){int a = stack.Pop();int b = stack.Pop();sum =b*a;stack.Push(sum);}else if(tokens[i]=="/"){int a = stack.Pop();int b = stack.Pop();sum =b/a;stack.Push(sum);}else{stack.Push(int.Parse(tokens[i]));}}return sum;}
【栈】【150. 逆波兰表达式求值】【中等】(需回顾)相关推荐
- Suzy找到实习了吗Day 11 |栈与队列中途 20. 有效的括号,1047. 删除字符串中的所有相邻重复项,150. 逆波兰表达式求值
Day 11 20. 有效的括号 1047. 删除字符串中的所有相邻重复项 150. 逆波兰表达式求值 20. 有效的括号 注意栈不是一个数据结构,需要自己用list实现栈的逻辑 class Solu ...
- LetCode: 150. 逆波兰表达式求值
提示 LintCode中的相关算法题实现代码,可以在我的GithHub中下载. 题目需求 根据逆波兰表示法,求表达式的值. 有效的运算符包括 +, -, *, / .每个运算对象可以是整数,也可以是另 ...
- 算法训练Day11|LeetCode 20. 有效的括号、1047. 删除字符串中的所有相邻重复项、150. 逆波兰表达式求值
题目链接:20. 有效的括号 第一种情况:已经遍历完了字符串,但是栈不为空,说明有相应的左括号没有右括号来匹配,所以return false 第二种情况:遍历字符串匹配的过程中,发现栈里没有要匹配的字 ...
- 算法训练第十一天|力扣20. 有效的括号,1047. 删除字符串中的所有相邻重复项,150. 逆波兰表达式求值
20. 有效的括号 题目链接:有效的括号 参考:https://programmercarl.com/0020.%E6%9C%89%E6%95%88%E7%9A%84%E6%8B%AC%E5%8F%B ...
- leetcode 150. 逆波兰表达式求值(栈)
根据 逆波兰表示法,求表达式的值. 有效的算符包括 +.-.*./ .每个运算对象可以是整数,也可以是另一个逆波兰表达式. 说明: 整数除法只保留整数部分. 给定逆波兰表达式总是有效的.换句话说,表达 ...
- 【Leetcode栈与队列】150. 逆波兰表达式求值(后缀表达式求值,看作对对碰游戏)
文章目录 Leetcode150 1.问题描述 2.解决方案 3.计算机的思考方式 Leetcode150 1.问题描述 2.解决方案 1.逆波兰表达式优点 2.逆波兰表达式相当于是二叉树中的后序遍历 ...
- 【Java】LeetCode 150. 逆波兰表达式求值 (后缀表达式)
题目: 根据 逆波兰表示法,求表达式的值. 有效的算符包括 +.-.*./ .每个运算对象可以是整数,也可以是另一个逆波兰表达式. 说明: 整数除法只保留整数部分. 给定逆波兰表达式总是有效的.换句话 ...
- 150. 逆波兰表达式求值。
根据 逆波兰表示法,求表达式的值. 有效的算符包括 +.-.*./ .每个运算对象可以是整数,也可以是另一个逆波兰表达式. 注意 两个整数之间的除法只保留整数部分. 可以保证给定的逆波兰表达式总是有效 ...
- 力扣150. 逆波兰表达式求值(JavaScript)
var evalRPN = function(tokens) {let arr=[]const map = new Map([["+", (a, b) => a * 1 + ...
最新文章
- 【linux系统】maven安装
- CentOS 阿里云硬盘扩容
- 成功解决r2_score函数输出值始终为0的情况
- linux剧集nfo生成器,精彩LINUX软件推荐
- 谋定重整衍生新360行-李玉庭:协同电商经信研究生态系统
- linux文件系统启动流程,linux 内核启动过程以及挂载android 根文件系统的过程
- html扇形调节角度,CSS如何实现任意角度的扇形(代码示例)
- Spring Boot(5)---第一个Spring Boot应用程序
- OpenCV:无法启动此程序,因为计算机中丢失opencv_world310.dll
- Factory Method (工厂模式)
- 十篇论文攻克自然语言处理底层原理!推荐大家复现!
- Android 高德地图搜索功能相关
- 【排队论 | 数学建模常用模型】
- php 图片木马,php图片木马怎么运行
- 如何开启QQ在线客服
- Python爬虫随笔
- 小学计算机基础知识题目,小学信息技术基础知识复习题(清华版第三册)
- linux的dhcp服务
- VR全景拍摄如何拍摄?如何使用拍摄器材?
- 标准化金额:加小数点和逗号 / 加逗号 / 加小数点 / 纯数字
热门文章
- 旷视三维视觉Workshop | 3D组组长与你畅聊三维技术新动态
- ACL 2020 | 基于多级排序学习的层次化实体标注
- 码牛安卓移动互联网高级开发正式课
- 用Transformer完全代替CNN:AN IMAGE IS WORTH 16X16 WORDS: TRANSFORMERS FOR IMAGE RECOGNITION AT SCALE
- Spring框架设计
- java lambdamart库,LambdaMART 之 lambda(示例代码)
- Apexchart整数多出小数点
- JAVA——Java连接MySQL数据库
- linux 常用命令 (firewall,netstat)
- 【过程记录 】windows和ubuntu两台电脑局域网进行socket通信收发数据和传输文件