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
#include<iostream>
#include<vector>
#include<string>
#include<stdlib.h>
using namespace std;
class Solution{
public:
int eval_expression(vector<string> & tokens, int & pt);
int evalRPN(vector<string> &tokens);
};
int Solution::eval_expression(vector<string> &tokens,int &pt){
string s=tokens[pt];
if(s=="+"||s=="-"||s=="*"||s=="/"){
pt--;
int v2=eval_expression(tokens,pt);
pt--;
int v1=eval_expression(tokens,pt);
if(s=="+")
return v1+v2;
else if(s=="-")
return v1-v2;
else if(s=="*")
return v1*v2;
else
return v1/v2;
}else{
return atoi(s.c_str());
}
}
int Solution::evalRPN(vector<string> &tokens){
int pt=tokens.size()-1;
return eval_expression(tokens,pt);
}
int main(){
string array[5]={"2","1","+","3","*"};
vector<string> vs(array,array+5);
// vector<string>::iterator it;
// for(it=vs.begin();it!=vs.end();it++)
// cout<< *it << " ";
// cout<<endl;
Solution s;
int length=4;
int sum=s.eval_expression(vs,length);
cout<<sum<<endl;
return 0;
}