文章目录

  • 1. 题目描述
  • 2. 解题思路
  • 3. 动图演示
  • 4. 代码实现

1. 题目描述

2. 解题思路

逆波兰表达式由波兰的逻辑学家卢卡西维兹提出,它的特点是:没有括号,运算符总是放在和它相关的操作数之后。因此,逆波兰表达式也称后缀表达式,它严格遵循「从左到右」的运算。

在我们平时生活中,使用的算式则是一种中缀表达式,如 ( 1 + 2 ) * ( 3 + 4 )

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

计算逆波兰表达式的值时,使用一个栈存储操作数,从左到右遍历逆波兰表达式,进行如下操作:

  • 从左至右扫描该算术表达式,从第一个字符开始判断,如果该字符是数字,则将数字入栈;

  • 如果不是数字,该字符则是运算符,如果遇到运算符,则将栈里面的两个操作数出栈,其中先出栈的是右操作数,后出栈的是左操作数, 使用运算符对两个操作数进行运算,将运算得到的新操作数入栈。

整个逆波兰表达式遍历完毕之后,栈内只有一个元素,该元素即为逆波兰表达式的值。

3. 动图演示

来看个动图

4. 代码实现

有一点需要注意,num 1 和 num2 进行运算的时候,num1 是右操作数,num2 是左操作数,别写反了!!!

代码示例

class Solution {public:int evalRPN(vector<string>& tokens) {stack<long long> st;for (auto& str : tokens) {if (str == "+" || str == "-" || str == "*" || str == "/") {auto num1 = st.top();st.pop();auto num2 = st.top();st.pop();if (str == "+") {st.push(num2 + num1);}else if (str == "-") {st.push(num2 - num1);}else if (str == "*") {st.push(num2 * num1);}else if (str == "/") {st.push(num2 / num1);}}else {st.push(stoi(str)); // 如果是操作数就入栈,因为这是字符,所以要转成数字}}return st.top();}
};

什么是逆波兰表达式?相关推荐

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

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

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

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

  3. 数据结构:后缀表达式(逆波兰表达式)

    逆波兰表达式计算 package com.atchina.stack;import java.util.ArrayList; import java.util.List; import java.ut ...

  4. 数据结构:前缀,中缀,后缀表达式(逆波兰表达式)

    前缀表达式(波兰表达式) 前缀表达式的运算符位于操作数之前. 比如 (1+2)*3-4  对应的前缀表达式就是: - * + 1 2 3 4 前缀表达式的计算机求值 从右至左扫描表达式,遇到数字时,就 ...

  5. LetCode: 150. 逆波兰表达式求值

    提示 LintCode中的相关算法题实现代码,可以在我的GithHub中下载. 题目需求 根据逆波兰表示法,求表达式的值. 有效的运算符包括 +, -, *, / .每个运算对象可以是整数,也可以是另 ...

  6. Algorithm:C++语言实现之链表相关算法(单链公共结点问题、一般LCA、括号匹配、最长括号匹配、逆波兰表达式Reverse Polish Notation、直方图矩形面积、收集雨水问题)

    Algorithm:C++语言实现之链表相关算法(单链公共结点问题.一般LCA.括号匹配.最长括号匹配.逆波兰表达式Reverse Polish Notation.直方图矩形面积.收集雨水问题) 目录 ...

  7. 简单计算器 逆波兰表达式

    问题 C: 悠派计算器 时间限制: 1 Sec  内存限制: 128 MB 提交: 7  解决: 2 [提交][状态][讨论版][命题人:qianyouyou] 题目描述 yoyo的小老弟小渣渣灰特别 ...

  8. 【栈】【150. 逆波兰表达式求值】【中等】(需回顾)

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

  9. 逆波兰表达式简单介绍

    逆波兰表达式又叫做后缀表达式.在通常的表达式中,二元运算符总是置于与之相关的两个运算对象之间,所以,这种表示法也称为中缀表示.波兰逻辑学家J.Lukasiewicz于1929年提出了另一种表示表达式的 ...

  10. 【数据结构与算法】之深入解析“逆波兰表达式求值”的求解思路与算法示例

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

最新文章

  1. 2021年大数据常用语言Scala(十五):基础语法学习 元组  重点掌握
  2. 什么是SOLID原则(第3部分)
  3. 一个bug隐藏了另外一个bug,reloaddata,
  4. 生产订单新增按钮没权限
  5. Python正则表达式之元字符详解(1)
  6. Android开发之常用的自定义输入框之EditText
  7. mysql是bsd协议吗_freebsd下实现mysql的自动备份
  8. 2019 - OO第一单元作业总结
  9. 解决ojdbc14库引用问题
  10. java+swing+mysql员工工资管理系统设计分析
  11. 四种二维傅里叶变换对
  12. php基于纯真IP数据库实现IP地址信息查询
  13. 软件测试需要学数学,数学软件测试有感
  14. 取文件操作fopen(file open)
  15. matlab的梯形公式推导公式,用MATLAB作数值积分例.计算1)矩形公式和梯形公式将(0,4)-Read.ppt...
  16. 中科大计算机电子信息,中国科学技术大学电子工程与信息科学系
  17. 大学一年级(行走的皮卡丘)
  18. 礼金记账本安卓_礼金记账本
  19. JDK源代码以及200多部软件著作中出现的以连字符构造的1011个合成词
  20. matlab恒定值,基于MATLAB的明渠恒定非均匀渐变流水面线的数值计算

热门文章

  1. gSOAP编译以及测试过程
  2. 科技社计算机部长竞选演讲稿,计算机*组长竞聘演讲稿范文
  3. 机器学习——集成学习之 AdaBoosting
  4. JAVA JDK jdk 安装 下载后双击没反应
  5. 横板格斗类游戏实战:游戏数值策划表
  6. HT1622 驱动断码屏
  7. 校园学校排课选课系统 毕业设计毕设源码毕业论文开题报告参考(5)网站系统管理功能
  8. 红领巾竟然还能买?!---小学记忆
  9. 华为虚拟系统的相关配置
  10. Arduino编程基础-C