leetcode算法(150.逆波兰表达式求值)

逆波兰表达式:是一种后缀表达式,所谓后缀就是指运算符写在后面。(对二叉树进行后序遍历)

适合用栈操作运算:遇到数字则入栈;遇到运算符则取出栈顶两个数字进行计算,并将结果压入栈中。

  • tokens[i]std::string 类型(因为 tokensvector<string>

  • '+'char 类型(单字符字面量)

  • 所以用 "+"

cpp 复制代码
class Solution {
public:
    int evalRPN(vector<string>& tokens) {
        // 力扣修改了后台测试数据,需要用long long来避免整数溢出
        stack<long long> st; // 使用栈存储运算的中间结果
        
        for (int i = 0; i < tokens.size(); i++) {
            // 判断当前token是否为运算符
            if (tokens[i] == "+" || tokens[i] == "-" || tokens[i] == "*" || tokens[i] == "/") {
                // 如果是运算符,从栈顶取出两个操作数
                // 注意顺序:先弹出的是第二个操作数(后入栈的)
                long long num1 = st.top();
                st.pop();
                long long 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 {
                // 当前token是数字,将其转换为long long并入栈
                // stoll: string to long long
                st.push(stoll(tokens[i]));
            }
        }

        // 栈中最后剩下的就是计算结果
        long long result = st.top();
        st.pop(); // 弹出栈顶元素(清理栈,虽然函数返回前不pop也可以)
        return result; // 返回计算结果(隐式转换为int)
    }
};
相关推荐
Tisfy1 天前
LeetCode 3510.移除最小数对使数组有序 II:有序集合
算法·leetcode·题解·设计·有序集合
汉克老师1 天前
GESP2025年9月认证C++五级真题与解析(单选题9-15)
c++·算法·贪心算法·排序算法·归并排序·gesp5级·gesp五级
lihao lihao1 天前
c++红黑树
算法
Sarvartha1 天前
递推与递归笔记
算法
TracyCoder1231 天前
LeetCode Hot100(1/100)——1. 两数之和 (Two Sum)
算法·leetcode
进击的小头1 天前
常用数字滤波器的特性与适用场景
c语言·算法
狐571 天前
2026-01-19-LeetCode刷题笔记-1292-元素和小于等于阈值的正方形的最大边长
笔记·算法·leetcode
张祥6422889041 天前
误差理论与测量平差基础笔记六
笔记·算法·概率论
mjhcsp1 天前
透彻背包DP:从DFS暴力搜索到动态规划的逐步推导
算法·深度优先·动态规划
学嵌入式的小杨同学1 天前
【嵌入式 C 语言实战】交互式栈管理系统:从功能实现到用户交互全解析
c语言·开发语言·arm开发·数据结构·c++·算法·链表