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

【leetcode面试经典150题】55. 逆波兰表达式求值(C++)

【leetcode面试经典150题】专栏系列将为准备暑期实习生以及秋招的同学们提高在面试时的经典面试算法题的思路和想法。本专栏将以一题多解和精简算法思路为主,题解使用C++语言。(若有使用其他语言的同学也可了解题解思路,本质上语法内容一致)

【题目描述】

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

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

注意:

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

【示例一】

输入:tokens = ["2","1","+","3","*"]
输出:9
解释:该算式转化为常见的中缀算术表达式为:((2 + 1) * 3) = 9

【示例二】

输入:tokens = ["4","13","5","/","+"]
输出:6
解释:该算式转化为常见的中缀算术表达式为:(4 + (13 / 5)) = 6

【示例三】

输入: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 <= 10的4次方
  • tokens[i] 是一个算符("+""-""*" 或 "/"),或是在范围 [-200, 200] 内的一个整数

逆波兰表达式:

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

  • 平常使用的算式则是一种中缀表达式,如 ( 1 + 2 ) * ( 3 + 4 ) 。
  • 该算式的逆波兰表达式写法为 ( ( 1 2 + ) ( 3 4 + ) * ) 。

逆波兰表达式主要有以下两个优点:

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

【代码】

// 栈class Solution {
public:int evalRPN(vector<string>& tokens) {stack<int> stk;int n = tokens.size();for (int i = 0; i < n; i++) {string& token = tokens[i];if (isNumber(token)) {stk.push(atoi(token.c_str()));} else {int num2 = stk.top();stk.pop();int num1 = stk.top();stk.pop();switch (token[0]) {case '+':stk.push(num1 + num2);break;case '-':stk.push(num1 - num2);break;case '*':stk.push(num1 * num2);break;case '/':stk.push(num1 / num2);break;}}}return stk.top();}bool isNumber(string& token) {return !(token == "+" || token == "-" || token == "*" || token == "/");}
};
http://www.lryc.cn/news/340946.html

相关文章:

  • 云轴科技ZStack入选中国信通院《高质量数字化转型产品及服务全景图(2023年度)》
  • Workerman开启ssl方法如下
  • 如何防止服务器被攻击
  • 18 统计网站每日的访问次数
  • Java PDF文件流传输过程中速度很慢,如何解决?
  • MCU最小系统晶振模块设计
  • ELK及ELFK排错
  • 『Django』创建app(应用程序)
  • Docker安装(一)
  • 由于bug发现的现象
  • ES源码四:网络通信层流程
  • 贝锐蒲公英自研异地组网新技术:远程视频监控,流畅度、清晰度大幅提升
  • C# aspose word实现模板方式打印及打印速度慢解决方法
  • java纯文字游戏
  • mac IDEA激活 亲测有效
  • 视频怎么去水印,轻松去视频水印的方法
  • vue3+element+AntDesign(自动导入)+pina+vite+js+pnpm搭建项目框架
  • Android Studio XML 预览View 底部移动到右边
  • 计算机网络——实现smtp和pop3邮件客户端
  • 【Spring】面试题汇总
  • thinkphp6入门(23)-- 如何导入excel
  • 【数据结构3-栈和队列】
  • STL--list双向链表
  • ElasticSearch入门篇
  • MAXHUB会议解决方案持续进化,以“高效”为核心推动行业发展
  • CentOS 7安装Redis
  • Kubernetes (K8s) 部署前后端分离项目
  • MLT媒体程序框架01:概述
  • 9【原型模式】复制一个已存在的对象来创建新的对象
  • 谷粒商城实战(013 业务-认证服务-短信验证)