跳转至

2023-05-01 逆波兰表达式

力扣题目:Link

分析过程:

简单的逆波兰表达式求解实现,其核心逻辑为:

  • 当读取到非运算符:
    • 压入栈
  • 当读取到运算符(加减乘除):
    • 取出栈顶两个数
    • 做运算
    • 运算结果压入栈顶
  • 运行完毕时,栈中只存在一个数,即栈顶为运算结果:
    • 此时取出栈顶结果
    • 返回结果

实现代码如下

/* LeetCode Question No.150*/
/* code from 代码随想录 */
class Solution {
public:
    int evalRPN(vector<string>& tokens) {
        stack<int> st;
        for (int i = 0; i < tokens.size(); i++) {

            // 当读取到运算符时
            if (tokens[i] == "+" || tokens[i] == "-" || tokens[i] == "*" || tokens[i] == "/") {

                // 取出栈顶两个数
                int num1 = st.top();
                st.pop();
                int num2 = st.top();
                st.pop();

                // 做对应运算,并将运算结果压入栈顶
                if (tokens[i] == "+") st.push(num2+num1);
                if (tokens[i] == "-") st.push(num2-num1);
                if (tokens[i] == "*") st.push(num2*num1);
                if (tokens[i] == "/") st.push(num2/num1);

            } else {

                // 非运算符压入栈
                st.push(stoi(tokens[i]));
            }
        }

        // 运算完毕,取出栈顶结果
        int result = st.top();
        st.pop();

        // 返回结果
        return result;
    }
};