【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

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值