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

LeetCode150 逆波兰表达式求值

题目: 给你一个字符串数组 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

思路:

逆波兰表达式相当于二叉树的后序遍历,这种表达式得到的值不受括号的影响,是非常准确的。因此可以从判断当前的字符串位上的元素是不是四则运算的符号就行,如果是则取栈顶的的元素,并将该元素弹出栈,再取下一位元素,和该符号位做四则运算,再将计算的结果压入栈中。如果不是符号位,将该元素入栈。最后返回栈顶的元素就是计算的结果。

// 输入参数为一个字符类型的 vector
double test(vector<char>& s) {// 定义一个 double 类型的栈stack<double> st;// 循环遍历输入的字符 vectorfor (int i = 0; i < s.size(); i++) {// 如果当前字符是加号、减号、乘号、除号中的一个,则将栈顶的两个数弹出做相应的运算,然后将结果压入栈中if (s[i] == '+' || s[i] == '-' || s[i] == '*' || s[i] == '/') {double sum1 = st.top();st.pop();double sum2 = st.top();st.pop();if (s[i] == '+') st.push(sum1 + sum2);if (s[i] == '-') st.push(sum2 - sum1);if (s[i] == '*') st.push(sum1 * sum2);if (s[i] == '/') st.push(sum2 / sum1);}// 如果当前字符是数字字符,则将其转化为数字并压入栈中else {st.push(s[i] - '0');}}// 返回栈顶元素,即为计算结果return st.top();
}
http://www.lryc.cn/news/44199.html

相关文章:

  • 【Node.js】项目开发实战(中)
  • 记录一次 New Bing 英语陪练
  • 【Python】照片居然能变素描?不会画画但是咱会代码
  • 已解决正确配置git环境变量
  • 【逐步剖C】-第十章-自定义类型之结构体、枚举、联合
  • Windows Server 2016 中文版、英文版下载 (updated Mar 2023)
  • Linux 4G 通信实验
  • 华为OSPF技术详细介绍,保姆级,谁都能看懂(一)
  • 行人车辆检测与计数系统(Python+YOLOv5深度学习模型+清新界面)
  • SM3哈希算法的FPGA实现 I
  • 【数据结构与算法】线性表--数组
  • 剑指offer排序专题
  • 已解决Cannot open D:\Soft\Python36\Scripts\pip3-script.py
  • 3 步走,快速上手 API 接口测试
  • 爬虫-day1-正则表达式作业
  • 【半监督医学图像分割 2023 CVPR】RCPS
  • 【UVM实战练习项目】2、UVM验证环境基本框架搭建(实例一)(纯软件环境,方便日后测试使用)
  • 【web前端初级课程】第四章 什么是JavaScript
  • 数字中国建设进行时:吉林大学党委常务副书记冯正玉一行调研实在智能
  • 面试官灵魂拷问[二]:SQL 语句中 where 条件后写上 1=1 是什么意思?
  • 进程与线程的关系
  • 自定义异常
  • 基于springboot物资管理系统(程序+数据库)
  • 蓝桥杯Web组备赛笔记6
  • python控制语句
  • 华为OD机试题【最小叶子节点】用 Java 解 | 含解题说明
  • 【linux】多线程控制详述
  • SpringCloud学习-实用篇01
  • 如何使用python删除一个文件?好用到上头.....
  • java学习笔记——权限修饰符、内部类