LeetCode---Basic Calculator

来源:互联网 发布:mac下制作winpe启动盘 编辑:程序博客网 时间:2024/06/06 13:20

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

算法思想:

边扫描字符串,边计算结果,当扫到一个数时将其记录到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;     }};  


0 0
原创粉丝点击