Evaluate reverse Polish notation
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
Stack is used. If it is an operand, the stack is pressed. If it is an operator, the two elements at the top of the stack Are popped up for calculation and then the stack is pressed.
The remainder of the stack is the calculation result.
class Solution {public: int evalRPN(vector<string> &tokens) { stack<int> stk; for(vector<string>::size_type st = 0; st < tokens.size(); st ++) { if(tokens[st] == "+") { int a = stk.top(); stk.pop(); int b = stk.top(); stk.pop(); stk.push(a+b); } else if(tokens[st] == "-") { int a = stk.top(); stk.pop(); int b = stk.top(); stk.pop(); stk.push(b-a); } else if(tokens[st] == "*") { int a = stk.top(); stk.pop(); int b = stk.top(); stk.pop(); stk.push(a*b); } else if(tokens[st] == "/") { int a = stk.top(); stk.pop(); int b = stk.top(); stk.pop(); stk.push(b/a); } else { stk.push(atoi(tokens[st].c_str())); } } return stk.top(); }};
[Leetcode] evaluate reverse Polish notation