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

代码随想录二刷 | 栈与队列 |逆波兰表达式求值

代码随想录二刷 | 栈与队列 |逆波兰表达式求值

  • 题目描述
  • 解题思路 & 代码实现

题目描述

150.逆波兰表达式求值

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

提示:

  • 1 <= tokens.length <= 104

  • tokens[i] 是一个算符(“+”、“-”、“*” 或 “/”),或是在范围 [-200, 200] 内的一个整数

逆波兰表达式

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

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

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

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

解题思路 & 代码实现

本题中每一个子表达式要得出一个结果,然后拿这个结果再进行运算,那么这就是一个相邻字符串消除的过程。这样就与这和1047. 删除字符串中的所有相邻重复项 (opens new window)差不多,只是将消除相邻元素换成了运算。

class Solution {
public:
	int evalRPN(vector<string>& tokens) {
		stack<long long> st;
		for (int i = 0; i < tokens.size(); i++) {
			if (tokens[i] == '+' || tokens[i] == '-' || tokens[i] == '*' || tokens[i] == '/') {
				long long num1 = st.top();
				st.pop();
				long long num2 = st.top();
				st.pop();
				if (tokens[i] == '+') st.push(num2 + num1);
				if (tokens[i] == '-') st.push(num2 - num1);
				if (tokens[i] == '*') st.push(num2 * num1);
				if (tokens[i] == '/') st.push(num2 / num1);
			} else {
				st.push(stoll(tokens[i]));
			}
		}
		int result = st.top();
		st.pop();
		return result;
	}
};

相关文章:

  • HarmonyOs 4 (一) 认识HarmonyOs
  • Linux CentOS本地部署SQL Server数据库结合cpolar内网穿透实现公网访问
  • 6-55.汽车类的继承
  • Python-字典详解
  • 阿里云租赁费用_阿里云服务器多配置报价表
  • C语言实现植物大战僵尸(完整版)
  • 基于JavaScript的jimp库处理图片,添加绘制点
  • 阿里云新版公共实例从注册账号到创建设备生成参数教程
  • 【微信小程序】上传头像 微信小程序内接小程序客服
  • Apache Doris 详细教程(三)
  • 外包干了3个月,技术倒退2年。。。
  • 【EasyExcel实践】万能导出,一个接口导出多张表以及任意字段(可指定字段顺序)
  • TimeGPT:时间序列预测模型实例
  • 【系统运维】Centos部署Haproxy+Keepalived+RabbitMQ高可用集群
  • Vue3自定义Hooks定义
  • 2023年十大网络安全上市公司观察
  • 15:00面试,15:06就出来了,问的问题有点变态。。。
  • http和https的区别有哪些
  • 利用 Python进行数据分析实验(一)
  • 网络中常说的QOS是什么,又有什么作用
  • 图集︱“中国排面”威武亮相
  • 道指跌逾100点,特斯拉涨近5%
  • 图集|俄罗斯举行纪念苏联伟大卫国战争胜利80周年阅兵式
  • 市自规局公告收回新校区建设用地,宿迁学院:需变更建设主体
  • 公安部部署“昆仑2025”专项工作,严打环食药等领域突出犯罪
  • 北上广深均宣布下调个人住房公积金贷款利率