目录

一、原题再现

二、问题分析

三、完整代码


一、原题再现

150. 逆波兰表达式求值

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

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

可以保证给定的逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 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 + * 也可以依据次序计算出正确结果。
  • 适合用栈操作运算:遇到数字则入栈;遇到算符则取出栈顶两个数字进行计算,并将结果压入栈中

二、问题分析

遍历数组,将数字压入栈中,当遇见运算符时,就从栈中取出两个元素进行运算,并将结果压入栈中。直到遍历完最后一次运算结果压入栈中。

本题有一个注意点,就是将String类型转换成long类型才能进行加减乘除的运算。

1.Long.parseLong(String):将 string 参数解析为有符号十进制 long,字符串中的字符必须都是十进制数字。
2.Long.valueOf(String):参数String表示,指定 String 的值的 Long 对象。该参数被解释为表示一个有符号的十进制 long,该值与用该参数作为参数的 parseLong(java.lang.String) 方法得到的值非常相似。只是最后被转换为一个Long的包装类。

三、完整代码


class Solution {public int evalRPN(String[] tokens) {Stack <Long> stack= new Stack<>();for(int i=0;i<tokens.length;i++){if(!isOperator(tokens[i])){long elem=Long.parseLong(tokens[i]);stack.push(elem);}else{long elem2=stack.pop();long elem1=stack.pop();long result=calculate(elem1,elem2,tokens[i]);stack.push(result);}}Long e=stack.peek();long ans=e.longValue();return (int)ans;}private boolean isOperator(String token){if((token.equals("+"))||(token.equals("*"))||(token.equals("-"))||(token.equals("/"))){return true;}else{return false;}}private long calculate(long elem1,long elem2,String token){switch(token){case "+":return elem1+elem2;case "-":return elem1-elem2;case "*":return elem1*elem2;case "/":return elem1/elem2;default:return -1;}}
}

【Java版oj】逆波兰表达式求值相关推荐

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

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

  2. 复习栈和队列,详解最小栈,栈的弹出压入序列,逆波兰表达式求值

    栈和队列的概念 栈:吃进去吐出来 对列:吃进去拉出来 数据结构中的栈和内存中的区别 数据结构中的栈具有后进先出的特性,而内存中的栈是一个内存空间,只不过这个内存空间具与数据结构的栈具有相同的特性. 栈 ...

  3. 数据结构链表之栈——解决括号匹配问题和逆波兰表达式求值问题——6

    括号匹配问题和逆波兰表达式求值问题 基于上一节已经使用python代码对栈进行了简单的实现,这一节我们在其基础上解决两个常见的问题 案例 括号匹配问题(点我直接到代码实现) 逆波兰表达式求值问题(点我 ...

  4. leetcode_150. 逆波兰表达式求值

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

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

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

  6. (补)算法训练Day13 | LeetCode150. 逆波兰表达式求值(栈应用);LeetCode239. 滑动窗口最大值(单调队列);LeetCode347. 前K个高频元素(小顶堆,优先级队列)

    目录 LeetCode150. 逆波兰表达式求值 1. 思路 2. 代码实现 3. 复杂度分析 4. 思考 LeetCode239. 滑动窗口最大值 1. 思路 2. 代码实现 3. 复杂度分析 4. ...

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

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

  8. 代码随想录第11天 | LeetCode20. 有效的括号、LeetCode1047. 删除字符串中的所有相邻重复项、LeetCode150. 逆波兰表达式求值

    day11 | LeetCode20. 有效的括号.LeetCode1047. 删除字符串中的所有相邻重复项.LeetCode150. 逆波兰表达式求值 文章目录 day11 | LeetCode20 ...

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

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

最新文章

  1. //Eclipse 快捷方式
  2. android中获取某段程序的执行时间
  3. 【Codeforces Round #446 (Div. 2) C】Pride
  4. profile matlab,使用profile功能对Matlab性能调优
  5. 实例1.2:获得应用程序主窗口指针
  6. 数据结构之字典序全排列
  7. C++的new和delete
  8. 10-10-009-简介-常用Message Queue对比
  9. Android开发笔记(六十五)多样的菜单
  10. CSP -- 运营商内容劫持(广告)的终结者
  11. 色彩原理-色相、明度、纯度
  12. cad画直角命令_CAD直线怎么画?直线命令快捷键是什么
  13. 腾讯 云通信 如何启动Demo
  14. 蜀门一直显示连接服务器,蜀门进不去点进入之后,出现无法连接服务器 – 手机爱问...
  15. 计算机硬件未来发展前景,计算机硬件的未来发展趋势
  16. Android系统版本(截止2022年2月)
  17. DNS和HTTP服务
  18. chrome播放rtsp视频使用vgx插件
  19. linux uefi转mbr方法,如何将uefi改成mbr分区
  20. RGB 到HSV转换 摘自wiki百科

热门文章

  1. forum php 无法下载应用程序,iphone无法下载应用程序怎么办?六个方法你看看
  2. 黑马程序员之HTML表单大全
  3. 利用Termux在手机上运行Linux系统
  4. CAD2020下载AutoCAD2020下载安装教程AutoCAD2020中文下载安装方法
  5. tensorflow微调vgg16 程序代码汇总
  6. VIM 编辑器使用指南
  7. 简历被肆意贩卖,个人信息安全何在?
  8. iOS Masonry
  9. webrtc详细教程
  10. 多模态 Generalized Visual Language Models