Leetcode:150. 逆波兰表达式求值(C++)

news2024/11/17 1:45:19

目录

问题描述:

实现代码和解析:

原理思路:


问题描述:

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

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

示例 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

实现代码和解析:

class Solution {
public:
    int evalRPN(vector<string>& tokens) 
    {
        stack<long int> st;
        for(int i=0;i<tokens.size();i++)
        {
            //当遇到运算符时
            if(tokens[i]=="+"||tokens[i]=="-"||tokens[i]=="*"||tokens[i]=="/")
            {
                long int nums2=st.top();
                st.pop();
                long int nums1=st.top();
                st.pop();
                if(tokens[i]=="+") st.push(nums1+nums2);
                else if(tokens[i]=="-") st.push(nums1-nums2);
                else if(tokens[i]=="*") st.push(nums1*nums2);
                else if(tokens[i]=="/") st.push(nums1/nums2);
            }
            //遇到数字时
            else
            {
                st.push(stol(tokens[i]));
            }
        }
        return st.top();
    }
};

原理思路:

        逆波兰表达式其实就是数据结构中的后缀表达式,是用栈是实现的经典例子,循环遍历字符串,当遇到数字就入栈,遇到运算符的时候就出栈两个元素进行运算后将结果再次入栈,画个图给大家演示一下过程。

         有些地方应该是没有引号的,我为了统一就没去掉,不过不影响理解。还有一些题外话,就是这里的转换函数,这里没有用int因为这道题测试数据超出了范围,所以我们这里用long int。

        stol()此函数将在函数调用中作为参数提供的字符串转换为long int。它解析str并将其内容解释为指定基数的整数,并将其作为long int类型的值返回。

        stoll()此函数将在函数调用中作为参数提供的字符串转换为long long int。它解析str并将其内容解释为指定基数的整数,并将其作为long long int类型的值返回。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Selenium用法详解【从入门到实战】【JAVA爬虫】

目录 简介 selenium安装 java使用 浏览器控制 修改窗口大小 窗口最大化 窗口全屏显示 浏览器前进&后退 浏览器刷新 浏览器打开新标签页 浏览器窗口切换 关闭标签页 关闭浏览器 浏览器页面截图 其他操作 简介 Selenium是一个用于Web应用程序测试的工具。Seleniu…

Redis发布订阅和事务实现原理

Redis发布订阅和事务实现原理发布订阅实现频道订阅与退订频道模式订阅与退订发送消息事务事务队列执行事务WATCH命令实现ACID原子性一致性隔离性持久性发布订阅 Redis的发布订阅由PUBLISH&#xff0c;SUBSCRIBE&#xff0c;PSUBSCRIBE等命令组成,例子如下: redis中我们还可以通…

三菱FX5U系列PLC通过简单CPU通信功能实现以太网通信的具体方法示例

三菱FX5U系列PLC通过简单CPU通信功能实现以太网通信的具体方法示例 对于三菱FX5U系列PLC,只需对CPU模块进行简单的参数设置,即可实现在指定时间内与指定软元件进行数据收发的功能。以1:1的方式设置通信对象(传送源)和通信对象(传送目标),在指定的通信对象之间进行数据的…

windows下TensorFlow-GPU 的安装教程

文章目录安装环境一. 查看自己的GPU版本是否支持cuda二 .安装CUDA三. 安装cuDNN安装环境 Anaconda: 4.10.1python: 3.8.8tensorflow-gpu: 2.5.0cuda: 11.4.0cudnn: 8.2.2.26 一. 查看自己的GPU版本是否支持cuda 打开显卡的控制面板&#xff0c;查看显卡是否支持cuda 查看te…

物联网-初步探索lua

初步探索lua 在物联网行业中&#xff0c;存在各种协议&#xff1b;比如在电控和云端进行通信的时候需要对功能进行解码和编码&#xff1b;当云端下发到设备的时候需要将Json格式的命令转换成电控码&#xff1b;当电控进行上报或者返回的时候&#xff0c;需要将16进制的电控码转…

(黑马C++)L06 重载与继承

一、关系运算符重载 以重载等于号运算符为例&#xff1a; #include<string> #include <iostream> using namespace std;class Person { public:Person(string Name, int age) {this->m_Name Name;this->m_Age age;}public:string m_Name;int m_Age; };bo…

SD存储卡接口规范介绍

SD存储卡简介 SD卡高度集成闪存&#xff0c;具备串行和随机存取能力。可以通过专用优化速度的串行接口访问&#xff0c;数据传输可靠。接口允许几个卡垛叠&#xff0c;通过他们的外部连接。接口完全符合最新的消费者标准&#xff0c;叫做SD卡系统标准&#xff0c;由SD卡系统规范…

用javascript分类刷leetcode14.排序算法(图文视频讲解)

常见排序算法复杂度 n^2除nlogn在不同数据规模下的结果 常见排序算法 算法可视化来源&#xff1a;http://visualgo.net/ 冒泡排序&#xff1a;时间复杂度O(n^2) 比较相邻元素&#xff0c;如果第一个比第二个大&#xff0c;则交换他们一轮下来&#xff0c;可以保证最后一个数…

Android入门第56天-在Android里使用OKHttp多线程下载文件并展示其进度

简介 OkHttp是一个神器。OkHttp分为异步、同步两种调用。今天我们就会基于OkHttp的异步调用实现一个多线程并行下载文件并以进度条展示总进度的实用例子。当然这不是我们的Android里使用OkHttp的最终目标&#xff0c;我们最终在下一篇中会在今天这一课的基础上加入“断点续传”…

【我在异世界学Linux】认识冯诺依曼体系结构

文章目录一、冯诺依曼体系结构是什么二、冯诺依曼为什么要这么设计&#xff1f;三、内存是怎么提高效率的呢&#xff1f;解释&#xff1a;程序要运行&#xff0c;必须加载到内存四、和QQ好友聊天的时候&#xff0c;数据是怎么流向的&#xff1f;一、冯诺依曼体系结构是什么 冯诺…

教你使用Java开发一款简单的扫雷小游戏 附实例代码

相信很多小伙伴都知道也玩过扫雷游戏,本篇文章将和大家分享一篇关于如何使用Java来实现一款简单的扫雷小游戏,这有助于大家对于Java相关知识的学习有一定的参考价值,下面是详情内容。 简介 学了几周的Java,闲来无事,写个乞丐版的扫雷,加强一下Java基础知识。 编写过程…

树莓派4b串口配置

从树莓派的相关资料我们可以看到&#xff0c;树莓派有两个串口可以使用&#xff0c;一个是硬件串口&#xff08;/dev/ttyAMA0&#xff09;,另一个是mini串口&#xff08;/dev/ttyS0&#xff09;。硬件串口有单独的波特率时钟源&#xff0c;性能好&#xff0c;稳定性强&#xff…

【Java寒假打卡】Java基础-接口

【Java寒假打卡】Java基础-接口接口的介绍接口的定义和特点接口中的成员特点JDK8 接口中的成员特点JDK9 接口中的成员特点类和接口的关系接口的介绍 &emsp&#xff1b;当一个类中的所有方法都是抽象方法的时候&#xff0c;我们就可以将其定义为接口&#xff0c;接口也是一…

Redis 缓存数据库

目录Redis 高可用方案高可用概念Redis 高可用的实现方案1、主从模式2、哨兵模式3、集群模式Redis 高可用方案 高可用概念 高可用&#xff08;High Availability&#xff0c;既HA&#xff09;&#xff0c;指的是通过尽量缩短日常维护操作和减少突发系统奔溃锁导致的停机时间来提…

Vagrant 安装 Centos7

首先准备VirtualBox, 当前实验版本为&#xff1a;7.0.4-154605-Win&#xff1b; 再次下载Vagrant windows版本&#xff1a;当前实验版本&#xff1a;vagrant_2.3.4_windows_i686 如果安装VirtualBox过程中提示缺少&#xff1a;Microsoft Visual C 2019 Redistributable &…

MySQL索引概述

索引的英文名叫 index 在数据库是一种帮助MySQL高效获取数据的数据结构 而且是一种有序的数据结构 在数据之外&#xff0c;数据库系统还维护着满足特定查找算法的数据结构&#xff0c;这些数据结构以某种方式引用(指向)数据&#xff0c; 这样就可以在这些数据结构上实现高级找…

公钥基础设施 时间戳规范测评

声明 本文是学习信息安全技术 公钥基础设施 标准符合性测评. 下载地址而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 公钥基础设施 时间戳规范测评 时间戳的产生和颁发 申请和颁发方式 测评依据见GB/T 20520—2006中6.1的内容。 开发者应提供文档…

2.0、Linux-基础了解

2.0、开机关机和基本目录介绍 开机登录&#xff1a; 开会机会启动许多程序&#xff1b;他们在Windows叫做 "服务" &#xff0c;在 Linux 中叫做 "守护进程"&#xff08;daemon&#xff09;&#xff1b; 开机成功后&#xff0c;他会显示一个文本登录…

Tailoring Self-Supervision for Supervised Learning-读后总结

Tailoring Self-Supervision for Supervised Learning摘要文章思路一些值得读的参考文献和技术&#xff1a;值得一读的高引文献可视化技术摘要 近期&#xff0c;在监督学习中部署一个合适的自监督学习来提高监督学习的性能是一个具有前景的方式。然而&#xff0c;因为之前的前…

MP中定义全局常量用于xml的判断,List<String> list = new ArrayList<>(Arrays.asList(“test“));

,1.普通方式 mybatis-plus.configuration.variables.secretFilterSwitch0 yml的方式 mybatis: mapper-locations: classpath:mapper/*.xml type-aliases-package: com.demo configuration: variables: userId: 456132465 userName: 李四 配置完成后在代…