evaluate-reverse-polish-notation

本文介绍了一种使用栈解决LeetCode上后缀表达式计算问题的方法。通过定义辅助函数判断操作符并进行数值转换,遍历输入的token序列,遇到数字时转化为整数并压栈,遇到操作符时从栈顶取出两个数进行运算并将结果重新压栈。最终栈顶元素即为计算结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

leetcode 的一道利用栈来求后缀表达式的简单的栈应用的题

具体思路: 逐个字符串进行判断
1:如果是操作符则栈中至少有两个数,将两个数从栈中弹出,判断操作符是什么并对这两个数进行计算,再将计算的结果存到栈中。
2:如果是数字,则利用toInteger(const string &str)函数进行转化,然后压入栈中。
当vector遍历一遍之后,栈中就只剩下最终结果。
代码如下:

class Solution {
public:
    int toInteger(const string &str){
    int temp=1;
    int result=0;
        for(int i=str.length()-1;i>=1;i--){
        int t=str[i]-'0';
        result+=t*temp;
        temp*=10; 
        }
        if(str[0]!='-')
            result+=(int)(str[0]-'0')*temp;
       else result*=-1;
    return result;
}
bool isOperator(const string &str){
        if(str=="+"||str=="-"||str=="*"||str=="/")
          return true;
        else return false;
    }
int evalRPN(vector<string> &tokens) {
        stack<int> sta;
        for(int i=0;i<tokens.size();i++){
            if(isOperator(tokens[i])){

                int a1=sta.top();sta.pop();
                int a2=sta.top();sta.pop();
                if(tokens[i]=="+") {
                    sta.push(a1+a2);
                }
                else if(tokens[i]=="-"){
                    sta.push(a2-a1);
                }
                else if(tokens[i]=="*"){
                    sta.push(a2*a1);
                }
                else if(tokens[i]=="/")
                {
                    sta.push(a2/a1);
                }
            }
            else{
                sta.push(toInteger(tokens[i]));
            }
        }
        return sta.top();
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值