150. 逆波兰表达式求值 (栈 难度2) 详细题解

题目链接

在这里插入图片描述
非常经典的栈题目了, 遇见数字就入栈, 遇见符号就取出栈首的两个数字作相应运算再入栈.

class Solution {
public:
    int evalRPN(vector<string>& tokens) {
        stack<int> ans;
        
        for(int i = 0; i < tokens.size(); i++){
            if(tokens[i]=="+" || tokens[i]=="-" || tokens[i]=="*" || tokens[i]=="/"){
                int tmp1 = ans.top();
                ans.pop();
                int tmp2 = ans.top();
                ans.pop();
                
                if(tokens[i]=="+") ans.push(tmp2+tmp1);
                else if(tokens[i]=="-") ans.push(tmp2-tmp1);
                else if(tokens[i]=="*") ans.push(tmp2*tmp1);
                else if(tokens[i]=="/") ans.push(tmp2/tmp1);
            }  //取出栈首两个元素运算并入栈
            else
               ans.push(stoi(tokens[i]));
        } 

        return ans.top() ;
    }      
};

猜你喜欢

转载自blog.csdn.net/a1097304791/article/details/85031684