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分析:数据结构与算法分析——C语言描述(Weiss著)中文版P52页有详细分析,逆波兰记法又叫后缀记法,计算这种表达式最容易的方法就是使用一个栈。当见到一个数时,就把它推入栈中;在遇到一个运算符时该运算符就作用于从该栈弹出的两个数(符号)上,将所得结果推入栈中,最后栈中的唯一元素便是表达式的计算结果。
Solution:
class Solution {
public:
int evalRPN(vector<string> &tokens) {
stack<string> st;
for(vector<string>::iterator iter=tokens.begin ();iter!=tokens.end ();++iter)
{
if(*iter=="+"||*iter=="-"||*iter=="/"||*iter=="*" && !st.empty())
{
int s2=stoi(st.top());st.pop();
int s1=stoi(st.top());st.pop();
char str[100];
if(*iter=="+")
{sprintf(str,"%d",s1+s2);st.push(str);}
else if(*iter=="-")
{sprintf(str,"%d",s1-s2);st.push(str);}
else if(*iter=="*")
{sprintf(str,"%d",s1*s2);st.push(str);}
else if(*iter=="/")
{sprintf(str,"%d",s1/s2);st.push(str);}
}
else
{
st.push(*iter);
}
}
return stoi(st.top());
}
};