【practise】逆波兰表达式求值

简介: 【practise】逆波兰表达式求值

1.前言

计算器是怎么识别我们输入的数字并进行计算的?如何确定给定字符串运算符运算数的优先级?本文简单介绍计算器计算识别的方法之一——后缀表达式

2.题目简介

题目链接:LINK

逆波兰表达式:又称后缀表达式,我们平时写的类似于“a+b+d”是中缀表达式,中缀表达式适合人类进行识别运算,但相对于计算机适合用后缀表达式。

题意很简单,给定一个后缀表达式,请运算得出结果并且返回。

想要完成这道题,我们首先来理解后缀表达式的运算逻辑。参考:LINK

3.求解思路

题解思路很简单,用栈模拟出计算过程即可。

运算逻辑是:遍历tokens字符串

  • 运算符,取两个操作数进行运算。
  • 运算数,入栈,等待运算。

4.示例代码

class Solution {
public:
    int evalRPN(vector<string>& tokens) {
        stack<int> st; //用于运算的栈
        set<string> s = { "+", "-", "*", "/" }; //用于判断是否是运算符的set
        for(auto& e: tokens)
        {
            //如果是操作符,就取数据运算
            if(s.find(e) != s.end())
            {
                int right = st.top();
                st.pop();
                int left = st.top();
                st.pop();
                switch(e[0])
                {
                    case '+':
                    st.push(left + right);
                    break;
                    case '-':
                    st.push(left - right);
                    break;
                    case '*':
                    st.push(left * right);
                    break;
                    case '/':
                    st.push(left / right);
                    break;
                }
            }
            else
            {
                //如果是操作符,那么就入栈
                st.push(stoi(e));
            }
        }
        return st.top();
    }
};


EOF

相关文章
|
移动开发 监控 JavaScript
分享77个HTML&CSS源码,总有一款适合您
分享77个HTML&CSS源码,总有一款适合您
846 1
|
存储 数据库
工作流Flowable 数据库表结构说明、Flowable 数据字典说明
工作流Flowable 数据库表结构说明、Flowable 数据字典说明
1741 0
|
缓存 算法 安全
[译] OpenSSL 3.0.0 设计
本文翻译 OpenSSL 官网文档:https://www.openssl.org/docs/OpenSSL300Design.htmlTongsuo-8.4.0 是基于 OpenSSL-3.0.3 开发,所以本文对 Tongsuo 开发者同样适用,内容丰富,值得一读!介绍本文概述了 OpenSSL 3.0 的设计,这是在 1.1.1 版本之后的 OpenSSL 的下一个版本。假设读者熟悉名为 &
345 0
[译] OpenSSL 3.0.0 设计
|
Java Android开发
Android 自定义注解之编译时注解(RetenttionPolicy.CLASS)
注解处理器(Annotation Processor) 注解处理器是javac的一个工具,它用来在编译时扫描和处理注解(Annotation)。你可以自定义注解,并注册到相应的注解处理器,由注解处理器来处理你的注解。
2205 0
|
10月前
|
存储 数据采集 自然语言处理
使用大模型时,该如何避免虚假信息的生成和使用?
使用大模型时,该如何避免虚假信息的生成和使用?
764 1
|
9月前
|
C语言 计算机视觉
【C语言】移位操作详解 - 《凌波微步 ! 》
移位操作符是C语言中非常重要的工具,提供了高效的位级操作方法。理解和正确使用移位操作符,对于编写高性能和高效能的程序至关重要。本文详细介绍了左移和右移操作符的使用方法、应用场景及注意事项,希望对您理解和使用C语言移位操作有所帮助。
634 5
|
消息中间件 存储 机器学习/深度学习
推荐系统入门
前言我最近正在入门推荐系统,发现这是一个非常有意思的领域。推荐系统无处不在,现在几乎所有的网站和应用里最显眼的位置和重要的位置中都是推荐系统。电商类的软件,例如Amazon、京东、淘宝、拼多多;首页和商品页面附近都是推荐你购买新的商品;视频类软件,例如Youtube、Bilibili、爱奇艺,它们的首页和搜索页中也都在推荐你可能会喜欢的影片;游戏类软件,例如原神、王者荣耀,无时无刻都在推荐你它们的
647 1
|
数据采集 存储 监控
如何进行数据收集和分析
如何进行数据收集和分析
600 1
|
JSON JavaScript 前端开发
TypeScript(十六)配置相关(tsconfig配置)
TypeScript(十六)配置相关(tsconfig配置)
410 1