跳转至

150.逆波兰表达式求值 (Medium)*

题目描述*

根据逆波兰表示法,求表达式的值。

有效的运算符包括 +, -, *, / 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。

说明*

整数除法只保留整数部分。

给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。

示例*

输入: ["2", "1", "+", "3", "*"]

输出: 9

输入: ["4", "13", "5", "/", "+"]

输出: 6

代码*

后缀表达式求值,学栈的时候就有这个问题。遇到数组入栈,遇到符号出栈计算后入栈。

class Solution {
public:
    int evalRPN(vector<string>& tokens) {
        stack<int> s;
        for(auto& str : tokens) {
            if(str == "+" || str == "-" || str == "*" || str == "/") {
                int op1 = s.top();
                s.pop();
                int op2 = s.top();
                s.pop();
                int res;
                switch(str[0]) {
                    case '+':
                        res = op1 + op2;
                        break;
                    case '-':
                        res = op2 - op1;
                        break;
                    case '*':
                        res = op1 * op2;
                        break;
                    case '/':
                        res = op2 / op1;
                        break;
                }
                s.push(res);
            }else {
                s.push(stoi(str));
            }
        }
        return s.top();
    }
};

最后更新: July 23, 2022