题目介绍

根据逆波兰表示法,求表达式的值。

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

说明:

  • 整数除法只保留整数部分。
  • 给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。
示例 1:输入: ["2", "1", "+", "3", "*"]
输出: 9
解释: ((2 + 1) * 3) = 9
示例 2:输入: ["4", "13", "5", "/", "+"]
输出: 6
解释: (4 + (13 / 5)) = 6
示例 3:输入: ["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

题目分析

逆波兰表达式,右边一个运算符,左边会对应两个数字,这正好可以利用栈的性质,通过vector数组,依次把前面的两个数字和后面操作符进行读取并运算,运算过程中栈对前面两个数字进行pop操作,对运算结果进行push操作,最后栈的top元素即是要计算的最终值。

源代码

class Solution
{
public:int evalRPN(vector<string>& tokens) {stack<int> s_num;int num1,num2;for(auto token:tokens){if(token=="+"||token=="-"||token=="*"||token=="/"){num2 = s_num.top();s_num.pop();num1 = s_num.top();s_num.pop();char c = token[0];switch(c){case '+':s_num.push(num1+num2);break;case '-':s_num.push(num1-num2);break;case '*':s_num.push(num1*num2);break;case '/':s_num.push(num1/num2);break;}}else{s_num.push(atoi(token.c_str()));}       }return s_num.top();}
};

leetcode之逆波兰表达式相关推荐

  1. 【Java】LeetCode 150. 逆波兰表达式求值 (后缀表达式)

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

  2. leetcode 150. 逆波兰表达式求值(栈)

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

  3. Leetcode 150. 逆波兰表达式求值 解题思路及C++实现

    解题思路: 使用一个栈来存储待计算的数字,当遇到符号时,则将栈顶的两个元素pop出来,计算得到新的数字,然后再push进栈,大循环内,每循环一次,就访问了容器中的一个string.大循环停止条件:遍历 ...

  4. [leetcode] 150. 逆波兰表达式求值

    class Solution {public:int evalRPN(vector<string>& tokens) {int len = tokens.size();stack& ...

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

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

  6. JavaScript逆波兰表达式求值

    逆波兰表达式简介 逆波兰表达式又叫做后缀表达式.逆波兰表示法是波兰逻辑学家J・卢卡西维兹(J・ Lukasiewicz)于1929年首先提出的一种表达式的表示方法 .后来,人们就把用这种表示法写出的表 ...

  7. LeetCode实战:逆波兰表达式求值

    题目英文 Evaluate the value of an arithmetic expression in Reverse Polish Notation. Valid operators are ...

  8. 逆波兰表达式求值(leetcode 150)

    文章目录 1.问题描述 2.难度等级 3.热门指数 4.解题思路 5.实现示例 5.1 C++ 5.2 Golang 参考文献 1.问题描述 逆波兰表达式也叫后缀表达式. 有效的算符包括 +.-.*. ...

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

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

  10. 【Leetcode栈与队列】150. 逆波兰表达式求值(后缀表达式求值,看作对对碰游戏)

    文章目录 Leetcode150 1.问题描述 2.解决方案 3.计算机的思考方式 Leetcode150 1.问题描述 2.解决方案 1.逆波兰表达式优点 2.逆波兰表达式相当于是二叉树中的后序遍历 ...

最新文章

  1. 【转】python中的字符数字之间的转换函数
  2. 分布式事物-2pc和3pc区别
  3. linux iptables规则组成及用法
  4. python初学者之网络爬虫_Python初学者之网络爬虫(二)
  5. 【数据分析】离婚率逐年上升,数据分析告诉你背后的主因竟然是它!
  6. Java中的ThreadPoolExecutor类
  7. [剑指offer]面试题第[60]题[JAVA][n个骰子的点数][动态规划][空间优化]
  8. Java学习--泛型
  9. #10 Linux硬盘管理
  10. Bootstrap滚动监控器
  11. OpenCV精进之路(八):图像轮廓和图像分割修复——轮廓查询和多边形包围轮廓
  12. mac本常用快捷键大全
  13. 定义结构体变量的三种方法
  14. 谷歌admob测试设备测试流程
  15. 30天自制操作系统 学习笔记1
  16. 前端优质网络内容(引用)
  17. C++制作加密聊天程序:这样设置一下,再也不用担心女朋友翻你手机了!
  18. 转发:神了,Fly_by结构原来就这么回事儿!
  19. ## 用python 80行代码实现一个微信消息撤回捕捉功能
  20. 未检测到与wia兼容的设备_扫描仪API接入大全:Twain, WIA 或 两者不具有.[换个思路 春暖花开]...

热门文章

  1. Codeforces525E Anya and Cubes(双向搜索)
  2. C# .NET开发图形图像程序时提示“GDI+ 中发生一般性错误“
  3. 【已解决】Maven更改本地默认仓库时遇到的问题。 No implementation for org.apache.maven.model.path.PathTranslator was bound
  4. iframe页面使用Js实现父页面和子页面通信
  5. 理解Java - AQS
  6. Spring之切入点表达式
  7. ipad连接电脑显示不在充电_笔记本电脑和投影仪连接后为什么投影仪不能显示电脑内容?...
  8. 如何复制网上的收费文本
  9. ubuntu自定义安装里怎么选_安装地暖时,地板要怎么选?
  10. linux怎么重载mysql配置命令_在Linux系统中启动/停止/重新启动/启用/重新加载MySQL和MariaDB服务...