Day28 代码随想录打卡|栈与队列篇---逆波兰表达式求值

题目(leecode T150):

给你一个字符串数组 tokens ,表示一个根据 逆波兰表示法 表示的算术表达式。

请你计算该表达式。返回一个表示表达式值的整数。

注意:

  • 有效的算符为 '+''-''*' 和 '/' 。
  • 每个操作数(运算对象)都可以是一个整数或者另一个表达式。
  • 两个整数之间的除法总是 向零截断 。
  • 表达式中不含除零运算。
  • 输入是一个根据逆波兰表示法表示的算术表达式。
  • 答案及所有中间计算结果可以用 32 位 整数表示。

方法:逆波兰表达式是一种后缀表达式,所谓后缀表达式就是运算符号在运算数的后面。如3 5 +,其实表示的是3 + 5的意思。而我们常见的3 + 5是中缀表达式,比较方便我们人的理解,但其实对于计算机来说,后缀表达式是更容易理解的。因为在计算机内部后缀表达式可以通过栈的方式来进行计算,具体方法如下:
后缀表达式中前两个是数字,后面跟着的是运算符号,因此我们可以在遇到数字的时候,将其进行入栈,当遇到运算符号的时候,我们出栈两个元素,然后根据运算符号进行正常的运算,随后再将其入栈, 重复此操作一直到处理完数组之后,栈中剩下的那个数字就是我们的逆波兰表达式的运算结果,将其返回即可。在这当中有一个小细节需要注意,就是两个数字运算顺序的问题,对于加法和乘法来说,两个操作数的顺序其实是没有影响的,但是对于减法和除法来说,运算是有顺序的,比如5 3 /,正确的顺序应该是5/3,但是在字符数组入栈的时候,5比3先入栈了,取出的时候,5就比3后取出,因此按照取出的顺序num1和num2,我们应该是num2/num1,减法同理。

题解:

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);  //注意是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;
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/629370.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

东方伟大思想家和哲学家颜廷利:有形的财富越与无形的财富

在世界的广阔舞台上&#xff0c;财富常被看作衡量国家与民族成就的重要尺度。然而&#xff0c;在物质和精神的天平上&#xff0c;真正具有深远意义的&#xff0c;往往是后者的累积与扩散。正如东方哲学的现代诠释者、当代中国教育界的杰出教授颜廷利所阐述&#xff0c;“有形的…

高级炫酷的个人主页or引导页

高级炫酷个人主页 效果图部分代码领取源码下期更新预报 效果图 部分代码 <!DOCTYPE html><html lang"zh-CN"><head><meta charset"utf-8"><meta content"yes" name"apple-mobile-web-app-capable"> &l…

动态路由实验新手入门:快速掌握核心知识点

大家好&#xff0c;这里是G-LAB IT实验室。今天带大家学习一下华为动态路由实验配置&#xff0c;新手入门&#xff0c;快速掌握核心知识点&#xff01; 01、实验拓扑 02、实验需求 1.根据拓扑运行对应的路由协议 2.每个路由器都有自己的环回口&#xff0c;宣告的区域不限制 …

Xinstall助力App下载量精准统计,洞悉推广效果

在移动互联网时代&#xff0c;App的下载量是衡量一个应用受欢迎程度的重要指标。然而&#xff0c;要精准统计App的下载量并不是一件容易的事情。为了解决这一难题&#xff0c;越来越多的开发者选择了Xinstall这一专业的App全渠道统计服务商。 Xinstall作为国内领先的App统计平…

第十四届蓝桥杯大赛软件赛国赛C/C++ 大学 B 组 抓娃娃

//前缀和 #include<bits/stdc.h> using namespace std; #define int long long const int n1e611; int a,b,c,d[n],l,r; signed main() {ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);cin>>a>>b;map<int,int>t;for(int i1;i<a;i){cin>…

高德、百度开车导航APP是怎么知道红绿灯倒计时的?

高德、百度开车导航APP之所以能够知道红绿灯的倒计时&#xff0c;这背后是一系列复杂的科技手段和数据分析的综合运用。从交管部门提供的数据&#xff0c;到导航软件自身通过大数据和算法进行的计算&#xff0c;每一个环节都为红绿灯倒计时的准确呈现提供了支撑。 首先&#xf…

Visual Studio Code 扩展程序Text Edits

需求 比如把Scarzombie_Monster全部转换为大写或者小写 安装 Text Edits 直接搜索安装即可 使用 假如要把Scarzombie_Monster全部转为大写&#xff0c;选中右键选中 To Upper Case或者直接快捷键shiftAltU即可

SprintBoot案例-增删改查

黑马程序员JavaWeb开发教程 文章目录 一、准备工作1. 准备数据库表1.1 新建数据库mytlias1.2 新建部门表dept1.3 新建员工表emp 2. 准备一个Springboot工程2.1 新建一个项目 3. 配置文件application.properties中引入mybatis的配置信息&#xff0c;准备对应的实体类3.1 引入myb…

工单系统有哪些?

市面上的工单系统真的非常多&#xff0c;一个个列举肯定说不完&#xff0c;我大致给它们按照不同的依据&#xff0c;进行了一下分类&#xff1a; 1、按部署方式分类&#xff1a; 本地化部署工单系统&#xff1a;适用于对数据安全性要求较高的企业&#xff0c;需要企业在本地服…

论文阅读:基于改进 YOLOv5算法的密集动态目标检测方法

目录 概要 Motivation 整体架构流程 技术细节 小结 论文地址&#xff1a;基于改进YOLOv5算法的密集动态目标检测方法 - 中国知网 (cnki.net) 概要 目的&#xff1a;提出一种基于 YOLOv5改进的检测算法&#xff0c;解决密集动态目标检测精度低及易漏检的问题。 方法&…

MQTT_服务器的安装_1.3

此例子是以Windows系统安装开源版本的EMQX 下载 EMQX 下载并解压 解压如图 进入bin 文件夹在文件目录中输入cmd回车 启动服务器 然后在cmd中输入下面的代码&#xff08;会弹出一个访问网络的选项&#xff0c;确认可以访问网络&#xff09; emqx start 结果如图&#xff08;…

Linux安装及管理程序!!!

目录 应用程序与系统命令的关系 典型应用程序的目录结构 常见的软件包封装类型 1.RPM软件包 2.DEB软件包 3.源代码软件包 4.附带安装程序的软件包 RPM软件包操作管理 1.RPM软件包管理器Red-Hat Package Manager 2.RPM软件包 rpm软件操作 1.先查询光盘连接情况 2.连…

使用websocket和服务建立链接慢的原因分析

1、java 项目使用websocketHandler创建websocket服务&#xff0c;在拦截器HttpSessionHandshakeInterceptor中&#xff0c;beforeHandshake日志到的很快&#xff0c;afterHandshake很慢 建立链接一直在连接中 2、原因分析&#xff1a; 找到服务器上的进程名 jps -l 3、使用…

【数组的度】leetcode,python

一种很菜的做法&#xff08;暴力&#xff09;&#xff0c;for循环&#xff08;样例能过一大半呢&#xff0c;复杂度的话。。。&#xff09; class Solution:def findShortestSubArray(self, nums: List[int]) -> int:nlen(nums)if n1:return nmx1#出现次数最多的计算for i …

iOS 主要语言切换问题

前言 上架时需要把主要语言切换成英文&#xff0c;存储时一直提示“因为您必须先为使用这种语言的每个版本提供所有必需的截屏”错误。 错误截图 解决方案&#xff1a; 1、增加英文的截图去审核&#xff0c;审核过了再切换主要语言 官方文档出处 END.

【前沿探索】|大模型在二进制安全领域中的应用

引言 随着“软件定义万物”的时代到来&#xff0c;软件在我们生活中扮演着不可或缺的角色。然而&#xff0c;不严格的软件设计、开发人员的能力限制&#xff0c;以及编程语言本身的不安全性&#xff0c;都可能导致软件出现缓冲区溢出、整型溢出、格式化字符串攻击等缺陷。这些…

家庭主妇,宝妈在家能做什么副业有收入?

作为家庭主妇和宝妈&#xff0c;您可以考虑以下副业来增加收入 1. 在家兼职 您可以在家里做一些兼职工作&#xff0c;如数据输入、文案撰写、翻译、客服等。可以通过在线平台或社交媒体寻找这些机会。 2. 做任务 目前网上最流行的就是做任务&#xff0c;因为简单无门槛&…

自定义 Gradle 插件进行统一的静态代码分析

静态代码分析是一项了不起的技术, 它能让代码库更易于维护. 但是, 如果你在不同的版本库中拥有多个服务(可能由不同的团队开发), 如何才能让每个人都遵循既定的代码风格呢? 一个好办法是将所有规则封装在一个插件中, 该插件会在每个项目构建时自动执行所需的验证. 因此, 在本…

2024年第十届中西部外语翻译大赛(1)

2024年第十届中西部外语翻译大赛 竞赛信息 “由中西部翻译协会共同体指导发起&#xff0c;各省市译协共建学术指导委员会&#xff0c;2024年第十届中西部外语翻译大赛由中西部翻译协会共同体秘书处&#xff08;武汉公仪网络科技有限公司&#xff09;承办。” - 获奖证书样图 -…

怎么3d立面有些模型不能删除是什么原因怎么解决?---模大狮模型网

在进行3D建模和设计过程中&#xff0c;有时会遇到一些模型无法删除的情况&#xff0c;这可能会导致设计流程受阻&#xff0c;影响工作效率。本文将介绍在3D立面中遇到无法删除模型的原因以及解决方法&#xff0c;帮助您顺利解决这一问题&#xff0c;提高设计效率。 一、模型未正…