题目描述
 
Evaluate the value of an arithmetic expression in Reverse Polish Notation. Valid operators are+,-,,/. Each operand may be an integer or another expression.*
 
Some examples:
 
 ["2", "1", "+", "3", "*"] -> ((2 + 1) * 3) -> 9
  ["4", "13", "5", "/", "+"] -> (4 + (13 / 5)) -> 6
 
分析
 
引用辅助堆栈,采用堆栈进行将int和运算符分别压栈存储
 
代码
 
class Solution {
public:
    int evalRPN(vector<string> &tokens) {
        //建立int数字堆栈
        stack<int>Stk;
        int a = 0,b=0,c=0;
        for(auto temp:tokens)
        {
            //判断是否为字符
            if(temp == "+"||temp == "-"||temp=="*"||temp == "/")
            {
                //int堆栈存储数小于2
                if(Stk.size()<2)
                    return 0;
                a = Stk.top();Stk.pop();
                b = Stk.top();Stk.pop();
                
                switch(transform(temp))
                {
                    case '+':c = a + b;break;
                    case '-':c = b - a;break;
                    case '*':c = b * a;break;
                    case '/':c = b / a;break;
                }
                Stk.push(c);
            }
            //如果为数字,压栈
            else
            {
                Stk.push(atoi(temp.c_str()));
            }
        }
        return Stk.top();
    }
private:
    //字符串hash到字符
    char transform(string s){
        char temp;
        if(s=="+") 
            temp = '+';
        else if(s=="-") 
            temp = '-';
        else if(s=="*")
            temp = '*';
        else if(s=="/") 
            temp = '/';
        return temp;
    }
};
 
总结
 
合理引用辅助内存,栈。 stack是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶。