用栈的方法解题思路都比较简单,而我用递归的方法实现了对括号的处理,实现方法也很简单。直接上代码:
class Solution {
public:
int calculate(string s) {
int index = 0;
return recursiveCal(index,s);
}
int recursiveCal(int &index,string s)
{
int curNumber = 0;
int calResult = 0;
int sign = 0;
while(index<s.length())
{
curNumber = 0;
switch(s[index])
{
case '('://遇到前括号调用递归
{
++index;
calResult += sign==0?recursiveCal(index,s):-recursiveCal(index,s);
break;
}
case ')'://遇到后括号返回
{
++index;
return calResult;
}
case '+':
{
++index;
sign = 0;
break;
}
case '-':
{
++index;
sign = 1;
break;
}
case ' ':
{
++index;
break;
}
case '0'...'9':
{
while(index<s.length()&&s[index]>='0'&&s[index]<='9')//算出整串数字的值
{
curNumber = curNumber*10+s[index]-'0';
++index;
}
calResult += sign==0?curNumber:-curNumber;//一旦出现数字,就计算一次
}
}
}
return calResult;
}
};