变量简洁正确完整思路

4 + 13 / 5,这就是中缀表达式,计算机从左到右去扫描的话,扫到13,还要判断13后面是什么运算法,还要比较一下优先级,然后13还和后面的5做运算,做完运算之后,还要向前回退到 4 的位置,继续做加法
转化为后缀表达式之后:["4", "13", "5", "/", "+"] ,就不一样了,计算机可以利用栈里顺序处理,不需要考虑优先级了。也不用回退了, 所以后缀表达式对计算机来说是非常友好的
栈stk存放数字,遇到+-*/就popnum1num2计算结果push,遇到数字stoi并push,最后剩一个答案
class Solution {
public:
    int evalRPN(vector<string>& tokens) {
        stack<int>stk;
        for(int i=0;i<tokens.size();i++){
            if(tokens[i]=="+"||tokens[i]=="-"||tokens[i]=="*"||tokens[i]=="/"){
                int num1=stk.top();stk.pop();
                int num2=stk.top();stk.pop();
                if(tokens[i]=="+")stk.push(num2+num1);
                else if(tokens[i]=="-")stk.push(num2-num1);
                else if(tokens[i]=="*")stk.push(num2*num1);
                else if(tokens[i]=="/")stk.push(num2/num1);
            }else{
                stk.push(stoi(tokens[i]));
            }
        }
        return stk.top();
    }
};
踩过的坑
C++不能直接用string作为switch(),这道题只需要把string当做char就可以了
                    stk.push(num2+num1);
先放进去的num2是左边,后放进去先拿出来的num1是右边
posted on 2021-08-04 22:07  offer快到碗里来~  阅读(23)  评论(0)    收藏  举报