【数据结构与算法】力扣 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 + * 也可以依据次序计算出正确结果。
  • 适合用栈操作运算:遇到数字则入栈;遇到算符则取出栈顶两个数字进行计算,并将结果压入栈中

分析解答

总体思路就是栈的运用。

注意:向零截断指的是在整数除法中舍弃小数部分的行为。当两个整数相除时,结果会截断为最接近零的整数。这意味着如果结果为正数,则向下取整,如果结果为负数,则向上取整。

/**
 * @param {string[]} tokens
 * @return {number}
 */
var evalRPN = function (tokens) {
    let arr = []
    for (let i = 0; i < tokens.length; i++) {
        if (tokens[i] === '+') {
            let temp1 = arr.pop()
            let temp2 = arr.pop()
            let res = Number(temp2) + Number(temp1)
            arr.push(res)
            continue
        }
        if (tokens[i] === '-') {
            let temp1 = arr.pop()
            let temp2 = arr.pop()
            let res = Number(temp2) - Number(temp1)
            arr.push(res)
            continue
        }
        if (tokens[i] === '*') {
            let temp1 = arr.pop()
            let temp2 = arr.pop()
            let res = Number(temp2) * Number(temp1)
            arr.push(res)
            continue
        }
        if (tokens[i] === '/') {
            let temp1 = arr.pop()
            let temp2 = arr.pop()
            let res = Number(temp2) / Number(temp1) > 0 ? Math.floor(Number(temp2) / Number(temp1)) : Math.ceil(Number(temp2) / Number(temp1))
            arr.push(res)
            continue
        }
        arr.push(tokens[i])
    }
    return arr[0]
};

思路拓展

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

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

相关文章

变电站自动化控制系统应用案例分析

变电站自动化控制系统介绍 变电站自动化控制系统用于大中型企业变电站项目&#xff0c;这类企业变压器多&#xff0c;日耗电量大。把多个变压器集中到一个电器平台上&#xff0c;集中管理分析&#xff0c;优化厂区用电管理&#xff0c;从而达到集中控制、集中分析、集中管理的…

【网络原理】以太网协议 | 以太网数据帧格式 | DNS域名解析系统

文章目录 一、以太网协议1.以太网数据帧格式MAC地址IP地址和MAC地址各自的用途 二、DNS 一、以太网协议 通过网线、光纤来通信&#xff0c;使用的就是以太网协议。 以太网协议&#xff0c;横跨了数据链路层和物理层。 1.以太网数据帧格式 由帧头载荷&#xff08;IP数据报&…

简单谈谈URL过滤在网络安全中的作用

用户花在网络上的时间越来越多&#xff0c;浏览他们最喜欢的网站&#xff0c;点击电子邮件链接&#xff0c;或利用各种基于网络的 SaaS 应用程序供个人和企业使用。虽然这种不受约束的网络活动对提高企业生产力非常有用&#xff0c;但也会使组织面临一系列安全和业务风险&#…

13.4.1 实验1:配置VTP

1、使用目的 通过本实验可以掌握 VTP三种模式的区别。VTP工作原理。VTP的配置和调试方法 2、实验拓扑 配置VTP的实验拓扑如下图所示 3、实验拓扑 3.1、实验准备 通过命令 delete nash:van.dat和erasestartup-config把3台交换机的配置清除干净&#xff0c;重启交换机&#…

shell脚本,删除30天以前的日志,并将日志推送到nas,但运行出现/bin/bash^M。

删除30天以前的日志 将日志推送到nas中&#xff0c;然后删除pod中的日志 pod挂载到本地 运行出现/bin/bash^M 1、删除30天以前的日志&#xff1a; #! /bin/bash# 定义源日志目录 LOG_DIR/home/log/ # 删除日志 find $LOG_DIR -type f -name "*.log" -mtime 30 -exec…

二维码门楼牌管理应用平台建设:智能化信息管理的新篇章

文章目录 前言一、二维码门楼牌管理应用平台的建设意义二、二维码门楼牌管理应用平台的核心功能三、二维码门楼牌管理应用平台对城市管理的深远影响四、结语 前言 随着信息技术的快速发展&#xff0c;二维码门楼牌管理应用平台已成为城市治理的新宠。本文将深入探讨二维码门楼…

项目运行到手机端

运行到真机 手机和点到连在同一个wifi网络下面点击hbuiler上面的预览得到一个&#xff0c;network的网址这个时候去在手机访问&#xff0c;那么就可以访问网页了 跨域处理 这个时候可能会访问存在跨域问题 将uniapp的H5版本运行到真机进行调试&#xff0c;主要涉及到跨域问题…

Avalonia .NET构建Linux桌面应用

目录 &#x1f47b;前言 &#x1f4bb;安装Avalonia &#x1f4e6;创建项目 &#x1f4da;在win下运行 ​&#x1f511;打包发布​编辑 &#x1f4fb;在linux下运行 环境WIN10 VS2022 debian &#x1f47b;前言 Avalonia 是一个用于创建跨平台用户界面 (UI) 的开源框架…

c++day7

【4】weak_ptr //引入weak_ptr解决循环引用问题 #include <iostream> #include <memory> using namespace std; class Test; class Demo { public:weak_ptr<Test> t; //指向Test类的弱智能指针Demo(){cout << "Demo的无参构造" << …

MySQL —— 表的基本操作

一、创建 1.语法 create table 表名称( 自定义变量1, 自定义变量2, 自定义变量3&#xff08;最后一个变量末尾不需要加任何标点符号&#xff09; )charset字符集 collate校验集 engine存储引擎; ps&#xff1a;若是不具体给字符集、校验集、储存引擎&#xff0c;则采用配置文件…

COUNT作为子查询

文章目录 假如需要显示customers表中每个客户的订单总数。子查询对于检索出的10001客户&#xff0c;统计其在orders表中的订单数目。为了对每个客户执行COUNT(*)计算&#xff0c;应该将COUNT(*)作为一个子查询。 联结 假如需要显示customers表中每个客户的订单总数。 子查询 …

牛客热题:判断链表是否有环

&#x1f4df;作者主页&#xff1a;慢热的陕西人 &#x1f334;专栏链接&#xff1a;力扣刷题日记 &#x1f4e3;欢迎各位大佬&#x1f44d;点赞&#x1f525;关注&#x1f693;收藏&#xff0c;&#x1f349;留言 文章目录 牛客热题&#xff1a;判断链表是否有环题目链接方法一…

2000.1-2023.8中国经济政策不确定性指数数据(月度)

2000.1-2023.8中国经济政策不确定性指数数据&#xff08;月度&#xff09; 1、时间&#xff1a;2000.1-2023.8 2、指标&#xff1a;CNEPU&#xff08;经济政策不确定性指数&#xff09; 3、来源&#xff1a;China Economic Policy Uncertainty Index 4、用途&#xff1a;可…

跨境选品师项目究竟算不算是蓝海项目呢?

在全球化日益加深的今天&#xff0c;跨境贸易成为了一个热门的话题。而在这一领域中&#xff0c;跨境选品师项目正逐渐崭露头角&#xff0c;被许多人视为蓝海项目中的一片新大陆。那么&#xff0c;跨境选品师项目究竟算不算是蓝海项目呢? 首先&#xff0c;我们需要明确什么是蓝…

ModuleNotFoundError: No module named ‘notebook.notebookapp‘

这个链接给出了一些解释https://blog.csdn.net/zjsnnn/article/details/135998315 但是他的问题是notebookapp.py在notebook中没有&#xff0c;在nbclassic中有 我的问题是两个文件夹都有这个文件&#xff0c;并且两个文件不一样&#xff0c;所以按他的修改没有成功。 我的问题…

特斯拉PIXCELL矩阵大灯擎耀远程控制技术照亮未来智能之光

在科技的浪潮中&#xff0c;特斯拉这个名字如同一道闪电&#xff0c;照亮了新能源汽车的天空。而在这片星空中&#xff0c;特斯拉PIXCELL矩阵大灯则如同一颗璀璨的星辰&#xff0c;以其独特的创新技术和卓越的性能&#xff0c;为驾驶者提供了前所未有的照明体验。矩阵大灯技术如…

邦注科技即热式节能模温机 模温机的工作原理

模温机是一种用于控制模具温度的设备&#xff0c;主要用于塑料注塑、压铸、橡胶成型等工艺中。 其工作原理主要包括以下几个步骤&#xff1a; 加热阶段&#xff1a; 当模具需要加热时&#xff0c;双温模温机会启动加热系统&#xff0c;将热传导油或热传导水加热至设定温度。加…

运行DeepSORT_YOLOv5_Pytorch时出现的问题

文章目录 前言问题1&#xff1a;Loaderyaml.FullLoader问题2&#xff1a;utils. -> yolov5.utils.问题3&#xff1a;np.float -> float问题4&#xff1a;np.int -> int问题5&#xff1a;ImportError: cannot import name time_synchronized from yolov5.utils.torch_u…

k8s集群Grafana精选dashboard页面

文章目录 参考文档 Grafana自选模板推荐模板&#xff1a;13332、13824、14518Grafana默认配置我们选择 Node Exporter/Nodes 的 Dashboard 进去&#xff1a;点击 Kubernetes/Networking/Cluster 进去使用模板查看结果 Grafana接入Prometheus数据Grafana添加监控模板导入 1860_r…

「C/C++ 01」计算结构体/类的大小和内存对齐

目录 一、计算结构体的大小 二、计算类的大小 三、内存对齐 一、计算结构体的大小 计算结构体的大小要遵循内存对齐规则&#xff1a;即从第二个成员变量开始&#xff0c;起始位置要计算&#xff0c;在自己的大小和默认对齐数(VS编译器中默认对齐数为8)中选择较小的那个&#x…
最新文章