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 {

public:

    int evalRPN(vector<string> &tokens) 

    {

        stack<int> vals;

        if(tokens.size()==0) return 0;

        

        for(int i=0;i<tokens.size();i++)

        {

            string token=tokens[i];

            if(token=="+" || token=="-" || token=="*" || token=="/")

            {

                int y=vals.top();vals.pop();

                int x=vals.top();vals.pop();

                if(token=="+") vals.push(x+y);

                if(token=="-") vals.push(x-y);

                if(token=="*") vals.push(x*y);

                if(token=="/") vals.push(x/y);

            }

            else

            {

                vals.push(string2int(token));

            }

        }

        return vals.top();

    }

    int string2int(string s)

    {

        bool positive=true;

        if(s[0]=='-') positive=false;

        

        int result=0;

        for(int i=0;i<s.length();i++)

        if(s[i]!='-')

         result=result*10+s[i]-'0';

        return positive?result:-result;

    }

};

 

你可能感兴趣的:(eval)