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
Have you been asked this question in an interview?
class Solution {
public:
bool isoperator(string op)
{
if(op == "+" || op == "-" || op == "*" || op == "/")
return true;
else return false;
}
int compute(int op1, int op2, string op)
{
if(op == "+"){
return op1+op2;
}
else if(op == "-"){
return op1-op2;
}
else if(op == "*"){
return op1*op2;
}
else return op1/op2;
}
int evalRPN(vector<string> &tokens) {
if(tokens.size() == 1){
return atoi(tokens[0].c_str());
}
stack<string> buf;
for(int i = 0; i < tokens.size(); i++)
{
if(isoperator(tokens[i]))
{
string op1 = buf.top();
int ope1 = atoi(op1.c_str());
buf.pop();
string op2 = buf.top();
int ope2 = atoi(op2.c_str());
buf.pop();
int tmp = compute(ope2,ope1,tokens[i]);
if(i == tokens.size()-1)
{
return tmp;
}
else {
char buffer[64];
//itoa(tmp,buffer,10);
sprintf(buffer,"%d",tmp);
string res(buffer);
buf.push(res);
}
}
else buf.push(tokens[i]);
}
}
};