Leetcode 227. 基本计算器 II

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

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();

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值