目录

一、原题再现

二、问题分析

三、完整代码


一、原题再现

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. 云计算读书笔记(五)
  2. 任务中断间的同步与通信概述
  3. 为什么Nginx性能比Apache高
  4. THUSC2019游记
  5. python中not加变量是_MyPython--基础篇--变量
  6. LeetCode 2089. 找出数组排序后的目标下标
  7. 如何检查数字是否为2的幂
  8. 佛说剖腹产的孩子_选择好的剖腹产时间会改变孩子的命运吗?
  9. 淘宝双11的服务器架构分析(1)
  10. 字符常量与字符串常量
  11. 一条让人不安的坐地龙
  12. 用计算机弹极乐净土谱,原神琴谱极乐净土分享 曲谱怎么弹奏
  13. (己解决)黑苹果驱动英特尔核显疑问记录
  14. 资深黄金专家李鑫:独创7套算点理论震惊市场
  15. harry potter
  16. AtCoder Beginner Contest 224题解 A-G
  17. 阵列麦克风声音定位-代码python实现-二维与三维声音定位
  18. Python通过类的组合模拟街道红绿灯
  19. 打折优惠——循环入门
  20. 【2022】年度总结

热门文章

  1. 纯css实现坤坤经典动作-“铁山靠”
  2. Knights of the Round Table
  3. 连接已重置 原因和解决办法
  4. 一休哥的PowerBI学习之路-可控的视觉筛选器
  5. 量纲对回归结果的影响_关于SPSS回归分析与数据预处理的心得体会,句句都是肺腑之言...
  6. 人若无名便可专心练剑,物若无名便可随意取舍
  7. 服务业数字化:乱中求序,避免数据垄断
  8. 【案例】湘潭大学一体化运维管理平台
  9. 华为云服务器+Nginx+Python3.7+Django2.2+支付宝支付接入部署
  10. 中国地图json、世界地图json