Evaluate Reverse Polish Notation
Evaluate the value of an arithmetic expression in .
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
使用栈(Stack),如果是操作数则压栈,如果是操作符则弹出栈顶两个元素进行相应运算之后再压栈。
最后栈中剩余元素即计算结果。
注意:操作数的顺序。
class Solution {public: int evalRPN(vector& tokens) { stack stk; for(int i = 0; i < tokens.size(); i ++) { if(tokens[i] == "+") { int a = stk.top(); stk.pop(); int b = stk.top(); stk.pop(); stk.push(b+a); } else if(tokens[i] == "-") { int a = stk.top(); stk.pop(); int b = stk.top(); stk.pop(); stk.push(b-a); } else if(tokens[i] == "*") { int a = stk.top(); stk.pop(); int b = stk.top(); stk.pop(); stk.push(b*a); } else if(tokens[i] == "/") { int a = stk.top(); stk.pop(); int b = stk.top(); stk.pop(); stk.push(b/a); } else { int digit = atoi(tokens[i].c_str()); stk.push(digit); } } return stk.top(); }};