Leetcode 227. 基本计算器 II

本文介绍了一种基于栈实现的表达式求值算法,该算法能够处理加减乘除四则运算,并通过优先级判断来确保正确的计算顺序。文章详细解释了如何遍历输入字符串并根据运算符的不同进行相应的数值计算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

遇到+-,要把前面的运算都完成
遇到乘除,若之前的运算符是乘除的话,则运算乘除,否则不运算
【若乘除连着几个,后一个乘除都会先计算前一个乘除】

class Solution {
public:
    int get_new_num(int a,int op,int b){
        switch(op){
            case 1: return a+b;
            case 2: return a-b;
            case 3: return a*b;
            default: return a/b;
        }
    }
    int calculate(string s) {
        s.push_back('+');
        stack<int> op,num;
        int val=0;
        for(auto& x:s){
            switch(x){
                case '+':
                case '-':
                    num.push(val);val=0;
                    while(!op.empty()){
                        int b=num.top(),f=op.top();
                        num.pop(),op.pop();
                        int a=num.top();num.pop();
                        num.push(get_new_num(a,f,b));
                    }
                    op.push((x=='+'? 1:2));
                    break;
                case '*':
                case '/':
                    num.push(val); val=0;
                    if(!op.empty() && op.top()>2){
                        int b=num.top(),f=op.top();
                        num.pop(),op.pop();
                        int a=num.top();num.pop();
                        num.push(get_new_num(a,f,b));
                    }
                    op.push((x=='*'? 3:4));
                    break;
                case ' ':
                    break;
                default:
                    val=val*10+x-'0';
                    break;
            }
        }
        return num.top();

    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值