『力扣刷题本』:逆波兰表达式求值

2024-01-21

大家好久不昂,最近 1 个多月罗根一直在备考期末,文章发的很少。

现在已经放寒假啦,学习自然也不能拉下,毕竟 4 月份就要去参加蓝桥杯了。

先给自己定个小目标,日更 2 篇!

咳咳,下面马上开始讲题????

一、题目

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

二、思路解析

逆波兰表达式,其实也叫后缀表达式。

它的特点就是:没有括号,运算符总是放在和它相关的操作数之后。

这也是数据结构中,利用栈的特性来实现的一个相关考点。

在这道题中,我们要让函数遵循以下原则:

·如果遇到数字,则将数字入栈;

·如果遇到运算符(+、-、*、/),则将最上边的两个数字出栈。其中先出栈的是右操作数,后出栈的是左操作数,使用运算符对两个操作数进行运算,将运算得到的新操作数入栈。

目的是实现后缀表达式的「运算符总是放在和它相关的操作数之后」这一特点。

另外,为了判定传过来的元素是数字还是运算符,我们还要建立一个函数(isNumber),在刚传过来时进行判别。

下面请看完整代码????

三、完整代码

class Solution {
    public int evalRPN(String[] tokens) {
        Deque<Integer> stack = new LinkedList<Integer>();
        int n = tokens.length;
        for(int i = 0;i < n; i++){
            String token = tokens[i];
            if(isNumber(token)){
                stack.push(Integer.parseInt(token));
            }else{
                int num2 = stack.pop();
                int num1 = stack.pop();
                switch(token){
                    case"+":
                    stack.push(num1+num2);
                    break;

                    case"-":
                    stack.push(num1-num2);
                    break;

                    case"*":
                    stack.push(num1*num2);
                    break;

                    case"/":
                    stack.push(num1/num2);
                    break;
                    default:
                }
            }
        }
        return stack.pop();
    }

public boolean isNumber(String token){
    return !("+".equals(token) || "-".equals(token) || "*".equals(token) || "/".equals(token));
    }
}

以上就是本篇博客的全部内容啦,如有不足之处,还请各位指出,期待能和各位一起进步!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

『力扣刷题本』:逆波兰表达式求值 的相关文章

随机推荐

  • 液晶偏振光栅

    1 偏振 光是横波 在垂直于光的传播方向的平面内光波振动 即E矢量振动 各方向振幅都相等的光为自然光 只在某一方向有光振动的光称为线偏振光 各方向光振动都有 但振幅不同的光叫部分偏振光 螺旋着振动的光称圆偏振光 分旋和右旋 2 庞加莱球表示
  • 基于卡尔曼的混合预编码技术用于多用户毫米波大规模MIMO系统研究(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码及文章
  • Redis基础系列-哨兵模式

    Redis基础系列 哨兵模式 文章目录 Redis基础系列 哨兵模式 1 引言 2 什么是哨兵模式 3 哨兵模式的配置 4 哨兵模式的启动和验证 4 1 主master宕机 看会出现什么问题
  • 获取员工其当前的薪水比其manager当前薪水还高的相关信息

    后悔早签三方了 双非渣渣不该信金九银十 凯子今年确实也卷起来了 想进华为 就别去华为实习 鼠鼠拿了几个offer 请大家帮忙看下 有点困惑百度 base北京 n 4 16 薪资可 华为开奖 一个月过去了 25终于找到JAVA实习 算法方向推
  • 【go语言】结构体数据填充生成md错误码文件

    这里使用pongo2这个模版引擎库进行md文件渲染 GitHub flosch pongo2 Django syntax like template engine for Go package main import fmt github
  • 【go语言】读取toml文件

    一 简介 TOML 全称为Tom s Obvious Minimal Language 是一种易读的配置文件格式 旨在成为一个极简的数据序列化语言 TOML的设计原则之一是保持简洁性 易读性 同时提供足够的灵活性以满足各种应用场景 TOML
  • 都在做端到端了,传统规控/轨迹预测还能坚持几年?

    最近有些做传统规控和轨迹预测的小伙伴问我 现在LLM做端到端自动驾驶这么火 自己要不要考虑转行 坚持传统规控 轨迹预测还能做几年 会不会三五年后失业了 而且最近小米汽车发布会 也说已经搭载了端到端感知决策大模型 全球首次用于量产车 这个问题
  • 深圳三维扫描分析/偏差检测模具型腔三维尺寸及形位偏差测量公司

    CASAIM中科广电三维扫描模具型腔深圳案例 模具型腔的三维扫描分析 偏差检测是一项重要的质量控制过程 旨在确保模具制造过程中的精确度和一致性 CASAIM中科广电通过使用高精度的三维扫描设备 可以获取模具型腔的实际形状和尺寸数据 并将其与
  • ICLR2024 | ReSimAD:如何在没有真实数据的情况下,提升感知模型的泛化性能

    点击下方 卡片 关注 自动驾驶之心 公众号 ADAS巨卷干货 即可获取 今天自动驾驶之心为大家分享 ICLR 2024刚刚中稿的ReSimAD ReSimAD可以极大地提升感知模型对于目标域场景的泛化能力 甚至比一些无监督领域适配的方法还要
  • 回望计算机视觉会议ICCV的31年

    作者 原野寻踪 编辑 汽车人 原文链接 https zhuanlan zhihu com p 670393313 点击下方 卡片 关注 自动驾驶之心 公众号 ADAS巨卷干货 即可获取 点击进入 自动驾驶之心 全栈算法 技术交流群 本文只做
  • pip问题们

    pip问题们 下载指定版本 已经安装的库列表保存到文本文件中 根据依赖文件批量安装库 离线安装库 whl 文件 pip install git https xxxx安装失败解决方法 下载指定版本 安装特定版本的package 通过使用 gt
  • 上汽飞凡,突然换帅了。。。

    作者 有据无车 编辑 智能车参考 点击下方 卡片 关注 自动驾驶之心 公众号 ADAS巨卷干货 即可获取 点击进入 自动驾驶之心技术交流群 本文只做学术分享 如有侵权 联系删文 飞凡汽车 突然换帅了 最近 上汽集团官方宣布 乘用车总经理 飞
  • FL Studio2024国内中文版多少钱?有哪些新功能呢

    购买您想要的最新的水果软件FL2024版本 然后所有未来所有该版本更新都是免费的 再也不用付钱了 在音乐软件行业 更新费用通常在 960 1600 元之间 而 FL Studio 将始终免费为您提供最新版本 因为我们相信 只要我们开发 FL
  • 视频剪辑软件Camtasia2024最新版本快捷键大全

    Camtasia Studio是一款专门录制屏幕动作的工具 它能在任何颜色模式下轻松地记录 屏幕动作 包括影像 音效 鼠标移动轨迹 解说声音等等 今天来给大家介绍一下Camtasia快捷键的相关内容 Camtasia也是一个十分好用的电脑屏
  • 【EI复现】基于深度强化学习的微能源网能量管理与优化策略研究(Python代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 2 1 有 无策略奖励 2 2 训练结果1
  • 题解 | #连续两次作答试卷的最大时间窗#

    程序员到大神成长书单 最无语的公司 写代码让领导不开心了咋办 快手秋招急招 暑期实习也可以投 找实习需要实习经历 操作系统岗 简历能走吗 面了南网数字集团 面试官问的问题有两个挺尖锐的 这种是不是说明不太想要我 俗话说打蛇打七寸 我感觉面试
  • 查找薪水记录超15条的员工号emp_no以及其对应的记录次数

    理想 大模型面经 23届试用期没通过 还能找到工作吗 有没有啥厂招往届生啊 腾讯音乐前端暑期实习一面 已oc 华为od 机试 面试面经 华为OD技术岗面经汇总 软开 算法 测试岗 想看一下大家看法 一个月过去了 25终于找到JAVA实习 华
  • 短信系统搭建主要因素|网页短信平台开发源码

    短信系统搭建主要因素 网页短信平台开发源码 随着移动互联网的快速发展 短信系统已成为企业和个人进行信息传递的重要工具 建立一个高效可靠的短信系统对于企业来说非常重要 下面我们将介绍一些影响短信系统搭建的主要因素 1 平台选择 在搭建短信系统
  • 2024最新MathType7.4.10中文版下载安装激活教程

    MathType 是一款专业的数学公式编辑工具 提供交互式编辑器 让你在编辑数学试卷 书籍 报刊 论文 幻灯演示等文档轻松输入各种复杂的数学公式和符号 1 本次讲解mathtype 7版本的安装步骤 MathType2024 Win 安装包
  • 『力扣刷题本』:逆波兰表达式求值

    大家好久不昂 最近 1 个多月罗根一直在备考期末 文章发的很少 现在已经放寒假啦 学习自然也不能拉下 毕竟 4 月份就要去参加蓝桥杯了 先给自己定个小目标 日更 2 篇 咳咳 下面马上开始讲题 一 题目 给你一个字符串数组 tokens 表