150. 逆波兰表达式求值

给你一个字符串数组 tokens ,表示一个根据 逆波兰表示法 表示的算术表达式。

请你计算该表达式。返回一个表示表达式值的整数。

注意:

  • 有效的算符为 '+''-''*' 和 '/' 。
  • 每个操作数(运算对象)都可以是一个整数或者另一个表达式。
  • 两个整数之间的除法总是 向零截断 。
  • 表达式中不含除零运算。
  • 输入是一个根据逆波兰表示法表示的算术表达式。
  • 答案及所有中间计算结果可以用 32 位 整数表示。

示例 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 + 2 ) * ( 3 + 4 ) 。

该算式的逆波兰表达式写法为 ( ( 1 2 + ) ( 3 4 + ) * ) 。

class Solution {public int evalRPN(String[] tokens) {Stack<Integer> stack = new Stack<>();for(int i=0;i< tokens.length;i++){//如果是操作符的话就直接弹出栈顶的两个元素,再将运算的结果加入到栈中;String token=tokens[i];int num1,num2;if(token.equals("+")){num1= stack.pop();num2=stack.pop();//减法和除法的需要特殊注意一下,是num1是要被除或者减的那个数stack.push(num1 + num2);}else if(token.equals("-")){num1=stack.pop();num2=stack.pop();stack.push(num2-num1);}else if(token.equals("*")){num1=stack.pop();num2=stack.pop();stack.push(num1 * num2);}else if (token.equals("/")){num1=stack.pop();num2=stack.pop();stack.push(num2 / num1);}else{stack.push(Integer.parseInt(token)); //如果是数字的话转为整形后就直接加入栈中;}}return stack.pop(); //直接弹出栈中的最后一个元素;}
}

LeetCode:逆波兰式;相关推荐

  1. Leetcode 逆波兰式表达式求值

    class Solution {     public int evalRPN(String[] tokens) {         Stack<Integer> stack = new ...

  2. 使用栈解决的一类经典问题:表达式转换及求值;中缀表达式;前缀表达式,后缀表达式,中缀转前缀;中缀转后缀;后缀表达式求值;波兰式,逆波兰式

    文章目录 背景知识 表达式转换问题(考研经典) 一:手工转换 (1)中缀转前缀和中缀转后缀 (2)前缀转中缀和后缀转中缀 二:用栈实现表达式转换 (1)中缀转后缀 (2)中缀转前缀 表达式计算问题(使 ...

  3. php逆波兰表达式,PHP根据数字的字符表达式计算出结果(转换成逆波兰式再求解)[转]...

    这个简单的计算器采用的是逆波兰式来做的,仅支持加减乘除四种运算,纯粹个人练习记录一下,还望多多支持. 用法 require 'Calc.php'; $calc = new Calc('(1+9)/2' ...

  4. 将表达式转换成逆波兰式

    http://www.cnblogs.com/stay-foolish/archive/2012/04/25/2470590.html 假设表达式由单字母变量和双目四则运 算算符构成.试写一个算法,将 ...

  5. 数据结构——逆波兰式

    很久没有关注算法和数据结构,大部分知识都已经忘记了:是时间好好回炉一下了,说实话干读数据机构这本书还是挺枯燥而且这本书原理性比较多,有一定的难度.这不刚看到逆波兰式废了好大劲才搞懂,老了... 逆波兰 ...

  6. c语言int 转bool_C++代码实现逆波兰式_C 语言

    100行以内C++代码实现逆波兰式 逆波兰式(Reverse Polish notation,RPN,或逆波兰记法),也叫后缀表达式(将运算符写在操作数之后). 算术表达式转逆波兰式例子: 逆波兰式整 ...

  7. PHP中的逆波兰式应用

    定义 逆波兰式(Reverse Polish notation,RPN,或逆波兰记法),也叫后缀表达式(将运算符写在操作数之后)  如:我们平时写a+b,这是中缀表达式,写成后缀表达式就是:ab+  ...

  8. 逆波兰式与表达式求值

    何为波兰式?何为逆波兰式? 如何与表达式求值联系起来? 波兰式.逆波兰式是数据结构和编译原理里面提到的知识点,我们平时的运算式都是这样的 2 + 3 * (5 - 1)-10(中缀表达式),这样表达式 ...

  9. 逆波兰式数学表达式求解

    逆波兰式数学表达式求解 //输入逆波兰式表达式 #include<iostream> #include<string.h> using namespace std; //函数表 ...

最新文章

  1. dbca no protocol support
  2. 插值查找(按比例查找)
  3. linux selinux状态查看及关闭命令
  4. 电大计算机应用模块四实2010,国家开放大学《计算机应用基础》考试与答案形考任务模块2Word2010文字处理系统—客观题测验答案.docx...
  5. asp.net防类似DDOS攻击(CC攻击)代码
  6. SAP Hybris和Netweaver的租户隔离(Tenant isolation)机制设计
  7. 解决 Python fake_useragent 报错 fake-useragent Maximum amount of retries reached问题
  8. Android-Window(一)——初识Window
  9. 阿里巴巴荣获年度最佳BCM创新实践奖
  10. java Object数组转为int类型数组
  11. python微分几何_十一年磨一剑:中科大数学教授成功证明微分几何学两大猜想
  12. 联想服务器开机显示英文,在开机自检时,在联想LOGO画面处死机(即自检时死机)...
  13. OpenJudge_P7833 幂的末尾
  14. 雷迪9000使用说明_雷迪操作手册
  15. 小福利,采用excel函数制作大屏可视化,用sumifs函数快速统计汇总数据,锁行锁列以及锁列不锁行
  16. Windows 计算机上查看 DNS 缓存的方法
  17. 华为鸿蒙3.0亮相,搭载设备产业链投资机会带来了POKERTIME129263?
  18. matlab图像区域填充的原理_MATLAB中怎么用fill填充指定区域?
  19. 电子数据取证之网站分析和重构基础
  20. 微软自带杀毒软件Security Essentials占电脑内存很小 推荐使用可以安装下载

热门文章

  1. 高通Camera数字成像系统简介
  2. 关于 vue3.0 实战项目 setup、 props、 reactive、ref
  3. 树与二叉树——有关n叉树的若干问题
  4. 如何将xml格式转换为yolov5所需的txt格式
  5. 修改源码刷步数、年会摇一摇数据
  6. meethigher-定时刷步数收取蚂蚁森林能量
  7. 由二叉树构造赫夫曼树
  8. 计算机软件logo设计,硕思logo设计师(logo设计软件)
  9. Transformer 中 比较晦涩难懂的东西
  10. html面试题(一)--html css js