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
逆波兰表达式:用栈来模拟,遇到操作数直接压栈,碰到操作符则取栈顶的2个操作数进行计算(且第一次取出来的是右操作数),然后再把计算结果压栈,如此循环下去,最后栈中剩下的唯一一个元素便是整个表达式的值。
class Solution {
public:
int evalRPN(vector<string>& tokens) {
stack<int> s;
for(int i = 0; i < tokens.size(); i++)
{
if(tokens[i]== "+" || tokens[i]== "-" || tokens[i]== "*" || tokens[i]== "/")
{
int num1 = s.top();
s.pop();
int num2 = s.top();
s.pop();
s.push(cal(num2, num1, tokens[i]));
}
else
s.push(atoi(tokens[i].c_str()));
}
return s.top();
}
int cal(int num2, int num1, string s)
{
if(s == "+")
{
return num2+num1;
}
else if(s == "-")
{
return num2-num1;
}
else if(s == "*")
{
return num2*num1;
}
else if(s == "/")
{
return num2/num1;
}
else
return -1;
}
};