什么是逆波兰表达式?
文章目录
- 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();}
};
什么是逆波兰表达式?相关推荐
- LeetCode实战:逆波兰表达式求值
题目英文 Evaluate the value of an arithmetic expression in Reverse Polish Notation. Valid operators are ...
- 【Java】LeetCode 150. 逆波兰表达式求值 (后缀表达式)
题目: 根据 逆波兰表示法,求表达式的值. 有效的算符包括 +.-.*./ .每个运算对象可以是整数,也可以是另一个逆波兰表达式. 说明: 整数除法只保留整数部分. 给定逆波兰表达式总是有效的.换句话 ...
- 数据结构:后缀表达式(逆波兰表达式)
逆波兰表达式计算 package com.atchina.stack;import java.util.ArrayList; import java.util.List; import java.ut ...
- 数据结构:前缀,中缀,后缀表达式(逆波兰表达式)
前缀表达式(波兰表达式) 前缀表达式的运算符位于操作数之前. 比如 (1+2)*3-4 对应的前缀表达式就是: - * + 1 2 3 4 前缀表达式的计算机求值 从右至左扫描表达式,遇到数字时,就 ...
- LetCode: 150. 逆波兰表达式求值
提示 LintCode中的相关算法题实现代码,可以在我的GithHub中下载. 题目需求 根据逆波兰表示法,求表达式的值. 有效的运算符包括 +, -, *, / .每个运算对象可以是整数,也可以是另 ...
- Algorithm:C++语言实现之链表相关算法(单链公共结点问题、一般LCA、括号匹配、最长括号匹配、逆波兰表达式Reverse Polish Notation、直方图矩形面积、收集雨水问题)
Algorithm:C++语言实现之链表相关算法(单链公共结点问题.一般LCA.括号匹配.最长括号匹配.逆波兰表达式Reverse Polish Notation.直方图矩形面积.收集雨水问题) 目录 ...
- 简单计算器 逆波兰表达式
问题 C: 悠派计算器 时间限制: 1 Sec 内存限制: 128 MB 提交: 7 解决: 2 [提交][状态][讨论版][命题人:qianyouyou] 题目描述 yoyo的小老弟小渣渣灰特别 ...
- 【栈】【150. 逆波兰表达式求值】【中等】(需回顾)
根据逆波兰表示法,求表达式的值. 有效的运算符包括 +, -, *, / .每个运算对象可以是整数,也可以是另一个逆波兰表达式. 说明: 整数除法只保留整数部分. 给定逆波兰表达式总是有效的.换句话说 ...
- 逆波兰表达式简单介绍
逆波兰表达式又叫做后缀表达式.在通常的表达式中,二元运算符总是置于与之相关的两个运算对象之间,所以,这种表示法也称为中缀表示.波兰逻辑学家J.Lukasiewicz于1929年提出了另一种表示表达式的 ...
- 【数据结构与算法】之深入解析“逆波兰表达式求值”的求解思路与算法示例
一.题目要求 根据逆波兰表示法,求表达式的值.有效的算符包括 +.-.*./,每个运算对象可以是整数,也可以是另一个逆波兰表达式. 两个整数之间的除法只保留整数部分. 可以保证给定的逆波兰表达式总是有 ...
最新文章
- 2021年大数据常用语言Scala(十五):基础语法学习 元组 重点掌握
- 什么是SOLID原则(第3部分)
- 一个bug隐藏了另外一个bug,reloaddata,
- 生产订单新增按钮没权限
- Python正则表达式之元字符详解(1)
- Android开发之常用的自定义输入框之EditText
- mysql是bsd协议吗_freebsd下实现mysql的自动备份
- 2019 - OO第一单元作业总结
- 解决ojdbc14库引用问题
- java+swing+mysql员工工资管理系统设计分析
- 四种二维傅里叶变换对
- php基于纯真IP数据库实现IP地址信息查询
- 软件测试需要学数学,数学软件测试有感
- 取文件操作fopen(file open)
- matlab的梯形公式推导公式,用MATLAB作数值积分例.计算1)矩形公式和梯形公式将(0,4)-Read.ppt...
- 中科大计算机电子信息,中国科学技术大学电子工程与信息科学系
- 大学一年级(行走的皮卡丘)
- 礼金记账本安卓_礼金记账本
- JDK源代码以及200多部软件著作中出现的以连字符构造的1011个合成词
- matlab恒定值,基于MATLAB的明渠恒定非均匀渐变流水面线的数值计算