当前位置: 首页 > news >正文

LeetCode:逆波兰式;

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();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(); //直接弹出栈中的最后一个元素;}
}

http://www.lryc.cn/news/15329.html

相关文章:

  • 为什么阳康后,感觉自己变傻了?
  • 考公和大厂40万年薪的offer,选哪个?
  • 多线程环境下调用 HttpWebRequest 并发连接限制
  • vue3-element-admin搭建
  • 蓝海创意云vLive虚拟直播亮相2023昆山元宇宙产品展览会
  • ThreadLocal线程变量
  • 【linux安装redis详解】小白如何安装部署redis,linux安装部署只需5步骤(图文结合,亲测有效)
  • 2023只会“点点点”,被裁只是时间问题,高薪的自动化测试需要掌握那些技能?
  • C语言【柔性数组】
  • AcWing275. 传纸条
  • 圆角矩形的绘制和曲线均匀化
  • 【Linux】环境变量,命令行参数,main函数三个参数保姆教学
  • 美国访问学者生活中有哪些饮食文化特点?
  • RxJava中的Subject
  • vue-element-admin在git 上 clone 之后无法install
  • Linux线程调度实验
  • 洛谷P5735 【深基7.例1】距离函数 C语言/C++
  • 企业什么要建设自有即时通讯软件系统
  • LocalDNS
  • 线程池种类和拒绝策略
  • Python制作9行最简单音乐播放器?不,我不满足
  • 零基础小白如何学会数据分析?
  • 【Linux】vim的使用及常用快捷键(不会使用vim?有这篇文章就够了)
  • 刷完这19道leetcode二分查找算法,不信进不了大厂
  • 四、Plugin Request and Sometimes pads
  • 唤醒手腕 Java 后端 Springboot 结合 Redis 数据库学习笔记(更新中)
  • robotiq 2f 140安装在UR3机械臂后面在gazebo仿真中散架、抖动
  • 坐标系概念 四元数 欧拉角
  • 从0开始写Vue项目-SpringBoot整合Mybatis-plus实现登录、注册功能
  • K8s中gRpc通信负载均衡失效