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)
    }
};
相关推荐
大江东去浪淘尽千古风流人物17 分钟前
【VLN】VLN(Vision-and-Language Navigation视觉语言导航)算法本质,范式难点及解决方向(1)
人工智能·python·算法
独好紫罗兰1 小时前
对python的再认识-基于数据结构进行-a003-列表-排序
开发语言·数据结构·python
wuhen_n1 小时前
JavaScript内置数据结构
开发语言·前端·javascript·数据结构
努力学算法的蒟蒻1 小时前
day79(2.7)——leetcode面试经典150
算法·leetcode·职场和发展
2401_841495641 小时前
【LeetCode刷题】二叉树的层序遍历
数据结构·python·算法·leetcode·二叉树··队列
AC赳赳老秦1 小时前
2026国产算力新周期:DeepSeek实战适配英伟达H200,引领大模型训练效率跃升
大数据·前端·人工智能·算法·tidb·memcache·deepseek
独好紫罗兰1 小时前
对python的再认识-基于数据结构进行-a002-列表-列表推导式
开发语言·数据结构·python
2401_841495641 小时前
【LeetCode刷题】二叉树的直径
数据结构·python·算法·leetcode·二叉树··递归
budingxiaomoli1 小时前
优选算法-字符串
算法
我是咸鱼不闲呀2 小时前
力扣Hot100系列19(Java)——[动态规划]总结(上)(爬楼梯,杨辉三角,打家劫舍,完全平方数,零钱兑换)
java·leetcode·动态规划