根据逆波兰表示法,求表达式的值。
有效的运算符包括 +, -, *, / 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。
说明:

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

  • 给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 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 -对计算机来说,计算前缀或后缀表达式的值非常简单
    
  • 前缀表达式的计算机求值

  1. 从右至左扫描表达式
  2. 遇到数字时,将数字压入堆栈,遇到运算符时,弹出栈顶的两个数,用运算符对计算,将结果入栈
  3. 重复上述过程直到表达式最左端,最后运算得出的值即为表达式的结果
  • 后缀表达式的计算机求值
  1. 从左至右扫描表达式
  2. 遇到数字时,将数字压入堆栈,遇到运算符时,弹出栈顶的两个数,用运算符对计算,将结果入栈
  3. 重复上述过程直到表达式最右端,最后运算得出的值即为表达式的结果

以下是前缀、中缀、后缀表达式详解

转载自: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. 逆波兰表达式求值】【中等】(需回顾)相关推荐

  1. Suzy找到实习了吗Day 11 |栈与队列中途 20. 有效的括号,1047. 删除字符串中的所有相邻重复项,150. 逆波兰表达式求值

    Day 11 20. 有效的括号 1047. 删除字符串中的所有相邻重复项 150. 逆波兰表达式求值 20. 有效的括号 注意栈不是一个数据结构,需要自己用list实现栈的逻辑 class Solu ...

  2. LetCode: 150. 逆波兰表达式求值

    提示 LintCode中的相关算法题实现代码,可以在我的GithHub中下载. 题目需求 根据逆波兰表示法,求表达式的值. 有效的运算符包括 +, -, *, / .每个运算对象可以是整数,也可以是另 ...

  3. 算法训练Day11|LeetCode 20. 有效的括号、1047. 删除字符串中的所有相邻重复项、150. 逆波兰表达式求值

    题目链接:20. 有效的括号 第一种情况:已经遍历完了字符串,但是栈不为空,说明有相应的左括号没有右括号来匹配,所以return false 第二种情况:遍历字符串匹配的过程中,发现栈里没有要匹配的字 ...

  4. 算法训练第十一天|力扣20. 有效的括号,1047. 删除字符串中的所有相邻重复项,150. 逆波兰表达式求值

    20. 有效的括号 题目链接:有效的括号 参考:https://programmercarl.com/0020.%E6%9C%89%E6%95%88%E7%9A%84%E6%8B%AC%E5%8F%B ...

  5. leetcode 150. 逆波兰表达式求值(栈)

    根据 逆波兰表示法,求表达式的值. 有效的算符包括 +.-.*./ .每个运算对象可以是整数,也可以是另一个逆波兰表达式. 说明: 整数除法只保留整数部分. 给定逆波兰表达式总是有效的.换句话说,表达 ...

  6. 【Leetcode栈与队列】150. 逆波兰表达式求值(后缀表达式求值,看作对对碰游戏)

    文章目录 Leetcode150 1.问题描述 2.解决方案 3.计算机的思考方式 Leetcode150 1.问题描述 2.解决方案 1.逆波兰表达式优点 2.逆波兰表达式相当于是二叉树中的后序遍历 ...

  7. 【Java】LeetCode 150. 逆波兰表达式求值 (后缀表达式)

    题目: 根据 逆波兰表示法,求表达式的值. 有效的算符包括 +.-.*./ .每个运算对象可以是整数,也可以是另一个逆波兰表达式. 说明: 整数除法只保留整数部分. 给定逆波兰表达式总是有效的.换句话 ...

  8. 150. 逆波兰表达式求值。

    根据 逆波兰表示法,求表达式的值. 有效的算符包括 +.-.*./ .每个运算对象可以是整数,也可以是另一个逆波兰表达式. 注意 两个整数之间的除法只保留整数部分. 可以保证给定的逆波兰表达式总是有效 ...

  9. 力扣150. 逆波兰表达式求值(JavaScript)

    var evalRPN = function(tokens) {let arr=[]const map = new Map([["+", (a, b) => a * 1 + ...

最新文章

  1. 【linux系统】maven安装
  2. CentOS 阿里云硬盘扩容
  3. 成功解决r2_score函数输出值始终为0的情况
  4. linux剧集nfo生成器,精彩LINUX软件推荐
  5. 谋定重整衍生新360行-李玉庭:协同电商经信研究生态系统
  6. linux文件系统启动流程,linux 内核启动过程以及挂载android 根文件系统的过程
  7. html扇形调节角度,CSS如何实现任意角度的扇形(代码示例)
  8. Spring Boot(5)---第一个Spring Boot应用程序
  9. OpenCV:无法启动此程序,因为计算机中丢失opencv_world310.dll
  10. Factory Method (工厂模式)
  11. 十篇论文攻克自然语言处理底层原理!推荐大家复现!
  12. Android 高德地图搜索功能相关
  13. 【排队论 | 数学建模常用模型】
  14. php 图片木马,php图片木马怎么运行
  15. 如何开启QQ在线客服
  16. Python爬虫随笔
  17. 小学计算机基础知识题目,小学信息技术基础知识复习题(清华版第三册)
  18. linux的dhcp服务
  19. VR全景拍摄如何拍摄?如何使用拍摄器材?
  20. 标准化金额:加小数点和逗号 / 加逗号 / 加小数点 / 纯数字

热门文章

  1. 旷视三维视觉Workshop | 3D组组长与你畅聊三维技术新动态
  2. ACL 2020 | 基于多级排序学习的层次化实体标注
  3. 码牛安卓移动互联网高级开发正式课
  4. 用Transformer完全代替CNN:AN IMAGE IS WORTH 16X16 WORDS: TRANSFORMERS FOR IMAGE RECOGNITION AT SCALE
  5. Spring框架设计
  6. java lambdamart库,LambdaMART 之 lambda(示例代码)
  7. Apexchart整数多出小数点
  8. JAVA——Java连接MySQL数据库
  9. linux 常用命令 (firewall,netstat)
  10. 【过程记录 】windows和ubuntu两台电脑局域网进行socket通信收发数据和传输文件