逆波兰表达式求值

 

 

 

 

 

/*
 * @lc app=leetcode.cn id=150 lang=cpp
 *
 * [150] 逆波兰表达式求值
 */

// @lc code=start
class Solution
{
public:
    int calc(int left, int right, char sign)
    {
        switch (sign)
        {
        case '+':
            return left + right;
        case '-':
            return left - right;
        case '*':
            return left * right;
        case '/':
            return left / right;
        }

        throw "";
    }
    int evalRPN(vector<string> &tokens)
    {
        stack<int> intStack;

        for (string &str : tokens)
        {

            if (str.size() == 1 &&
                (str[0] == '+' || str[0] == '-' || str[0] == '*' || str[0] == '/'))
            {

                // 遇到运算符,开始运算
                int right = intStack.top();
                intStack.pop();
                int left = intStack.top();
                intStack.pop();
                intStack.push(calc(left, right, str[0]));
                
            }
            else
            {
                // 遇到数字,直接入数字栈

                intStack.push(stoi(str));
            }
        }

        return intStack.top();
    }
};
// @lc code=end

 

posted @ 2024-01-20 20:24  AngDH  阅读(11)  评论(0编辑  收藏  举报