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> st;
int s1=0,s2=0;
for(vector<string>::iterator iter=tokens.begin();iter!=tokens.end();iter++){
if(*(iter)=="+"){
s1=st.top();
st.pop();
s2=st.top();
st.pop();
st.push(s2+s1);
}
else if(*(iter)=="-"){
s1=st.top();
st.pop();
s2=st.top();
st.pop();
st.push(s2-s1);
}
else if(*(iter)=="*"){
s1=st.top();
st.pop();
s2=st.top();
st.pop();
st.push(s2*s1);
}
else if(*(iter)=="/"){
s1=st.top();
st.pop();
s2=st.top();
st.pop();
st.push(s2/s1);
}
else st.push(atoi((*iter).c_str()));
}
return st.top();
}
};