LeetCode 0150 - Evaluate Reverse Polish Notation

2021-08-11 14:48:50 浏览数 (2)

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:

代码语言:javascript复制
Input: ["2", "1", " ", "3", "*"]
Output: 9
Explanation: ((2   1) * 3) = 9

Example 2:

代码语言:javascript复制
Input: ["4", "13", "5", "/", " "]
Output: 6
Explanation: (4   (13 / 5)) = 6

Example 3:

代码语言:javascript复制
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

代码语言:javascript复制
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());
    }
};

0 人点赞