根据 逆波兰表示法,求表达式的值。

有效的算符包括 +、-、*、/ 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。

注意 两个整数之间的除法只保留整数部分。

可以保证给定的逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 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 <= tokens.length <= 104
tokens[i] 是一个算符(“+”、“-”、“*” 或 “/”),或是在范围 [-200, 200] 内的一个整数

逆波兰表达式:

逆波兰表达式是一种后缀表达式,所谓后缀就是指算符写在后面。

平常使用的算式则是一种中缀表达式,如 ( 1 + 2 ) * ( 3 + 4 ) 。
该算式的逆波兰表达式写法为 ( ( 1 2 + ) ( 3 4 + ) * ) 。
逆波兰表达式主要有以下两个优点:

去掉括号后表达式无歧义,上式即便写成 1 2 + 3 4 + * 也可以依据次序计算出正确结果。
适合用栈操作运算:遇到数字则入栈;遇到算符则取出栈顶两个数字进行计算,并将结果压入栈中

析:

利用栈的先进后出的数据结构。
遇到运算符号,从栈中弹出两个数进行运算操作(后弹出的数应该排在运算表达式的前面)

解:

public class Test {public static void main(String[] args) {String[] tokens = {"2", "1", "+", "3", "*"};Test test = new Test();int res = test.evalRPN(tokens);System.out.println(res);}public int evalRPN(String[] tokens) {Deque<Integer> stack = new LinkedList<>();for (int i = 0; i < tokens.length; i++) {if (isNumber(tokens[i])) {stack.push(Integer.valueOf(tokens[i]));} else {Integer num1 = stack.pop();Integer num2 = stack.pop();switch (tokens[i]) {case "+":stack.push(num2 + num1);break;case "-":stack.push(num2 - num1);break;case "*":stack.push(num2 * num1);break;case "/":stack.push(num2 / num1);break;}}}return stack.pop();}private boolean isNumber(String token) {return !("+".equals(token) || "-".equals(token) || "*".equals(token) || "/".equals(token));}
}

150. 逆波兰表达式求值。相关推荐

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

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

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

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

  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. 【Java】LeetCode 150. 逆波兰表达式求值 (后缀表达式)

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

  6. 【栈】【150. 逆波兰表达式求值】【中等】(需回顾)

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

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

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

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

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

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

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

最新文章

  1. python工具使用笔记
  2. 微信小程序,图片居中显示,适配不同机型
  3. StackOverflow程序员推荐:每个程序员都应读的30本书
  4. 形状相似的物品_空运一般货物及危险品和特殊物品对包装的要求和规定!
  5. 宝马纯电动i4原型车谍照曝光 预计2021年上市
  6. [JAVA语法]怎样制作ear,war文件
  7. Jlink 下安装JLINK驱动
  8. 为WIN7原生2019版ISO更改为中文
  9. resnet网络结构图
  10. 宁波大学数学系好老师推荐
  11. java.lang.IndexOutOfBoundsExceptionInconsistency detected. Invalid view holder adapter position问题处理
  12. Named Route index has a default child route. When navigating to this named route to name index
  13. Linux的网络配置及jdk的安装
  14. 某视频播放公司笔试 2013
  15. 实习笔记——电力通信网
  16. 系统配置:CentOS8时间同步
  17. 【多目标跟踪论文阅读笔记——Chained-Tracker】
  18. 对医疗数据泄露零容忍,数据安全治理势在必行
  19. LNMP平台搭建-Centos6.x
  20. Nexus搭建私有仓库

热门文章

  1. java获取当前时间和设置时间格式
  2. n个重复数字求和问题
  3. eclipse将java项目转换成maven项目
  4. DynamicMethod
  5. [附源码]SSM计算机毕业设计大学生心理咨询网站JAVA
  6. mysql分库分表优化性能,MySQL性能管理及架构设计(三):SQL查询优化、分库分表 - 完结篇...
  7. C#简单实现成绩管理系统
  8. AudioTrack播放PCM音频
  9. 策略梯度简明逐步公式推导
  10. 智能家居——人脸识别 翔云平台(配置ssl和下载OpenSSL)