【逆波兰表达式求值】

2023-11-18

逆波兰表达式求值

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

class Solution {
public:
    int evalRPN(vector<string>& tokens) {
        stack<int> stk;
        int n = tokens.size();
        for (int i = 0; i < n; i++) {
            string& token = tokens[i];
            if (isNumber(token)) {
                stk.push(atoi(token.c_str()));
            } else {
                int num2 = stk.top();
                stk.pop();
                int num1 = stk.top();
                stk.pop();
                switch (token[0]) {
                    case '+':
                        stk.push(num1 + num2);
                        break;
                    case '-':
                        stk.push(num1 - num2);
                        break;
                    case '*':
                        stk.push(num1 * num2);
                        break;
                    case '/':
                        stk.push(num1 / num2);
                        break;
                }
            }
        }
        return stk.top();
    }

    bool isNumber(string& token) {
        return !(token == "+" || token == "-" || token == "*" || token == "/");
    }
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【逆波兰表达式求值】 的相关文章

  • Springboot读取配置文件、pom文件及自定义配置文件

    前言 很多人都知道读取配置文件 这是初级做法 上升一点难度是使用java bean的方式读取自定义配置文件 但是大家很少有知道读取pom文件信息 接下来我都会讲到 正文 笔者还是基于Spring Boot v1 5 8 RELEASE 利用

随机推荐

  • discuz首页出现重定向过多,discuz首页域名和默认域名一致的情况下无法保存

    问题 discuz首页域名和默认域名一致的情况下无法保存 如不填首页域名出现重定向过多问题 解决思路 使用FTP打开 source admincp admincp domain php将下面一段注释起来即可 约在63 65行 if empt
  • Advanced REST client的使用说明以及安装

    1 为什么要使用REST Client 在实际企业开发过程中经常会有这样的需求 1 我当前开发的这个系统是需要调用其他系统的接口 也就是我们需要频繁的测试接口 尝试不同的入参参数去查看返回结果 如果要在程序中调试就必要不断的改代码 重启to
  • 通过int 关系运算符来 比较两个 float 变量的大小

    include
  • 个人学习整理笔记-----------React新特性之Lazy与Suspense的懒加载

    文章目录 前言 react的新特性之Lazy与Suspense Lazy与Suspense概念 使用场景 懒加载实例 代码 总结 前言 react的新特性之Lazy与Suspense react更新过后出现了以下几个新特性 Context
  • 华为手机信息不弹屏了为什么_华为手机短信不提醒怎么办?华为手机短信提醒设置方法...

    华为手机短信提醒设置方法 1 检查当前设置的默认短信应用是哪个应用 点击桌面 设置 图标 找到 应用程序管理 选择 默认应用设置 选择 信息 可以看到当前正在使用的默认短信应用名称 如果使用的是第三方短信应用 请将 信息 勾选 改为使用默认
  • STM32 ADC转换+DMA传输(详解)

    1 选题背景 最近刚入坑 看了半个多月的入门视频并动手了一些简单的实验 但看工程项目的代码总是很费劲 便想以一个有难度的课题来进一步入门嵌入式开发 这个选题充分使用了STM32的各种片上外设 包括定时器 ADC模 数变换 GPIO口和DMA
  • [算法] 弗洛伊德算法 找出所有顶点之间最短距离

    package com guigu algorithm floydAlgorithm import java util Arrays author guorui fu versiion 1 0 弗洛伊德算法 本质就是将邻接矩阵中N值填满 时
  • 邮件程序 php_PHP

    PHP 发送电子邮件 PHP 允许您从脚本直接发送电子邮件 PHP mail 函数 PHP mail 函数用于从脚本中发送电子邮件 语法 mail to subject message headers parameters 参数 描述 to
  • Buffer Cache和Page Cache

    概念 如高速缓存 cache 产生的原理类似 在I O过程中 读取磁盘的速度相对内存读取速度要慢的多 因此为了能够加快处理数据的速度 需要将读取过的数据缓存在内存里 而这些缓存在内存里的数据就是高速缓冲区 buffer cache 下面简称
  • element tab-pane切换标签页 自动刷新

    解决方法 在子组件上加 v if
  • Kali如何配置静态IP,并且实现网络访问

    1 本地网络配置 我是使用VMware workstation的桥接网络 配置IP要根据对应的网络模式下对应的网络段进行配置 才能保证Kali与别的主机正常通信 桥接网络模式 我需要先看一下宿主机的网络IP地址 WIN r输入cmd 回车
  • 2013/1工作总结

    这个月抽时间看了C Primer一书 主要原因是没有基础知识直接看ATL的代码根本不可能 感想之一就是程序员也许必须学习一下C 只学习Java或者C 可能对语言的了解有限 造成对某些问题一直没有透彻的理解 当然了 最后发现还要好好学习理解编
  • TCP思维导图

  • GTest源码剖析(四)——TEST_P宏

    GTest源码剖析 TEST P宏 GTest源码剖析TEST P宏 TEST P宏用法 TestWithParam 类 1 TestWithParam 类定义 2 WithParamInterface 模版类定义 INSTANTIATE
  • 使用CURL上传图片至远程服务器(PHP >5.5)

    开头引入 use CURLFile curl文件上传 接收并上传 if FILES data file new CURLFile FILES file1 tmp name image jpeg FILES file1 name 文件流 fi
  • MVP和MVC的区别

    前提回顾 MVC架构 MVC就是Model View Controller 它们的作用是 它们之间的关系如下图所示 View传送指令到Controller Controller完成业务逻辑后 改变Model的状态 Model将新的数据发送到
  • RPC 开发系列一:RPC 基本介绍

    一 什么是 RPC RPC 的全称是 Remote Procedure Call 即远程过程调用 功能 屏蔽远程调用跟本地调用的区别 让我们感觉就是调用项目内的方法 隐藏底层网络通信的复杂性 让我们更专注于业务逻辑 二 RPC 通信流程 发
  • sourceforge文件下载过慢之原始解决方法

    近日 从sourceforge下载文件超线慢 从下午一直下载到网上11点多 居然下不完39MB的资料 百度一下方法有很多 却一个都没成功 比如 http sourceforge mirrorservice org 更是没用 部份有用 因为不
  • __cdecl __stdcall __fastcall区别

    一 三者区别一览表 stdcall cdecl fastcall 参数传递方式 右 gt 左 压栈 右 gt 左 压栈 左边开始的两个不大于4字节 DWORD 的参数分别放在ECX和EDX寄存器 其余的参数仍旧自右向左压栈传送 清理栈方 被
  • 【逆波兰表达式求值】

    逆波兰表达式求值 给你一个字符串数组 tokens 表示一个根据 逆波兰表示法 表示的算术表达式 请你计算该表达式 返回一个表示表达式值的整数 注意 有效的算符为 和 每个操作数 运算对象 都可以是一个整数或者另一个表达式 两个整数之间的除