Evaluate Reverse Polish Notation
Desicription Evaluate the value of an arithmetic expression in Reverse Polish Notation .

Valid operators are `+,`

`-,`

`*,`

`/`

. Each operand may be an integer or another expression.

Note :

Division between two integers should truncate toward zero.
The given RPN expression is always valid. That means the expression would always evaluate to a result and there wonâ€™t be any divide by zero operation.
Example 1:

1

2

3

Input: ["2", "1", "+", "3", "*"]

Output: 9

Explanation: ((2 + 1) * 3) = 9

Example 2:

1

2

3

Input: ["4", "13", "5", "/", "+"]

Output: 6

Explanation: (4 + (13 / 5)) = 6

Example 3:

1

2

3

4

5

6

7

8

9

10

Input: ["10", "6", "9", "3", "+", "-11", "*", "/", "*", "17", "+", "5", "+"]

Output: 22

Explanation:

((10 * (6 / ((9 + 3) * -11))) + 17) + 5

= ((10 * (6 / (12 * -11))) + 17) + 5

= ((10 * (6 / -132)) + 17) + 5

= ((10 * 0) + 17) + 5

= (0 + 17) + 5

= 17 + 5

= 22

Solution 1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

class Solution {

public :

int evalRPN (vector <string >& tokens) {

string s = tokens.back();

tokens.pop_back();

if (s == "*" || s == "/" || s == "+" || s == "-" ) {

int r2 = evalRPN(tokens);

int r1 = evalRPN(tokens);

if (s == "*" )

return r1 * r2;

else if (s == "/" )

return r1 / r2;

else if (s == "+" )

return r1 + r2;

else if (s == "-" )

return r1 - r2;

}

else

return atoi(s.c_str());

}

};