【LeetCode 25】150.逆波兰表达式求值

简介: 【LeetCode 25】150.逆波兰表达式求值

一、题意

二、思考过程

逆波兰表达式就是 一种后缀表达式。所谓后缀就是指运算符写在后面。

逆波兰表达式主要有以下两个优点:

  • 去掉括号后表达式无歧义。
  • 适合用栈操作运算:遇到数字则入栈;遇到运算符则取出栈顶两个数字进行运算,并将结果压入栈中。

其实逆波兰表达式相当于是二叉树中的后序遍历。

进一步看,这道题就是一个相邻字符串消除(运算)的过程

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;
    }
};


目录
相关文章
【逆波兰表达式求值】
【逆波兰表达式求值】
10_逆波兰表达式求值
10_逆波兰表达式求值
|
4月前
|
算法
【算法】栈算法——逆波兰表达式求值
【算法】栈算法——逆波兰表达式求值
|
7月前
彻底大悟!逆波兰表达式求值(150)
彻底大悟!逆波兰表达式求值(150)
|
7月前
|
索引
【力扣刷题】数组实现栈、后缀表达式(逆波兰表达式)求值、中缀表达式转换为后缀表达式(无括号&&有括号)
【力扣刷题】数组实现栈、后缀表达式(逆波兰表达式)求值、中缀表达式转换为后缀表达式(无括号&&有括号)
62 0
|
7月前
逆波兰表达式求值
逆波兰表达式求值
73 1
|
7月前
|
Java C++ Python
leetcode-150:逆波兰表达式求值
leetcode-150:逆波兰表达式求值
45 0
LeetCode 150 逆波兰表达式求值
构造一个栈,遇到运算符就弹出进行运算
7-323 逆波兰表达式
7-323 逆波兰表达式
62 0