leetcode 150.逆波兰表达式求值

⭐️ 题目描述

在这里插入图片描述


🌟 leetcode链接:逆波兰表达式求值

思路: 假设这样一组表达式 { "2" , "1" , "+" , "3" , "*" } 这是一种后缀表达式,首先我们准备一个栈,当如果不是操作符的时候我们就把当前操作数入栈,所以在这一组表达式中 "2" , "1" 不是入栈。入栈的时候我们把 string 转换成 int 使用 stoi() 这样等会更方便我们控制。stack => {2 , 1},当我们遇到操作符的时候,就出栈两次取左右操作数,由于栈是先进后出所以先取出来的是右操作数(对于 + * 操作符操作数的顺序没有影响,但是 - / 会有顺序之分 )
  取出来之后,我们将两个操作数与操作符计算,计算出来的结果继续入栈。stack => {3},继续 "3" 不是操作符入栈,stack => {3 , 3}"*" 是操作符取出栈顶两个元素计算, stack => {9} 最后循环遍历结束,所以最后结果是在栈顶 top 位置上。

代码:

class Solution {
public:
    int evalRPN(vector<string>& tokens) {
        stack<int> filter;
        // 使用栈
        for (int i = 0; i < tokens.size(); i++) {
            if (tokens[i] == "+" ||
                tokens[i] == "-" ||
                tokens[i] == "*" ||
                tokens[i] == "/"
            ) {
                // 取出左右栈操作数
                int right = filter.top();
                filter.pop();
                int left = filter.top();
                filter.pop();
                switch (tokens[i].front()) {
                    case '+':
                        filter.push(left + right);
                        break;
                    case '-':
                        filter.push(left - right);
                        break;
                    case '*':
                        filter.push(left * right);
                        break;
                    case '/':
                        filter.push(left / right);
                        break;
                }
            } else {
                // 不是操作符入栈
                filter.push(stoi(tokens[i]));
            }
        }

        // 最终结果在栈顶
        return filter.top();
    }
};

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值