Evaluate Reverse Polish Notation

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

class Solution{
private:
    bool isOperator(string s){
        if(s.length()==1 && string("+-*/").find(s) != string::npos)
            return true;
        else
            return false;
    }
public:
    int evalRPN(vector<string>& tokens){
        stack<int> s;
        for (string token : tokens){
            if(!isOperator(token)){
                s.push(stoi(token));
            }else{
                int y = s.top();
                s.pop();
                int x = s.top();
                s.pop();
                if(token == "+"){
                    s.push(x+y);
                }else if(token == "-"){
                    s.push(x-y);
                }else if(token == "*"){
                    s.push(x*y);
                }else if(token == "/"){
                    s.push(x/y);
                }
            }
        }
        return s.top();
    }
};

 

posted @ 2016-10-03 11:38  wxquare  阅读(134)  评论(0编辑  收藏  举报