LeetCode---Basic Calculator

题目大意:给出一个字符串形式的计算表达式,由整数,左右括号,加减符号组成 计算其结果。

算法思想:

边扫描字符串,边计算结果,当扫到一个数时将其记录到num中,扫描到非数的时候讲之前的数通过计算存到res中,然后判断扫描操作符如果为'+'号将sign标记为1,如果为‘-’则sign标记为-1,如果为‘(’则将当前结果和操作符入栈,来计算括号内的表达式,如果遇到‘)’则说明括号内的表达式计算完成分别取操作数栈顶和符号栈顶 来计算出当前的结果。按此操作,直至字符串扫描完毕。将最后的操作数计算入结果中。

代码如下:

class Solution {
public:
    int calculate(string s) {
      if(s.size()==0) return 0;
      stack<int> nums,ops;
      int res=0;//记录当前结果
      int num=0;//读取到的操作数
      int sign=1;//记录操作符
      for(char c:s){
         if(isdigit(c)){
             num=num*10+c-'0';
         }
         else{//遇见符号
             res+=num*sign;
             num=0;
             if(c=='+') sign=1;
             if(c=='-') sign=-1;
             if(c=='('){
                 nums.push(res);
                 ops.push(sign);
                 res=0;//还原
                 sign=1;
             }
             if(c==')'){
                 res=res*ops.top()+nums.top();
                 ops.pop();
                 nums.pop();
             }
         }
      }
      res+=sign*num;
      return res;
     }
};  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值