解法:使用两个栈模拟,一个存储数字,一个存储操作符。
class Solution {
public int calculate(String s) {
Stack<Character> op=new Stack<Character>();
Stack<Integer> num=new Stack<Integer>();
for(int i=0;i<s.length();i++){
if(s.charAt(i)=='+' || s.charAt(i)=='-' ||s.charAt(i)=='(')
op.push(s.charAt(i));
else if(s.charAt(i)==')'){
op.pop();
if(num.size()>1 && op.size()>0){
char temp1=op.pop();
int temp2=num.pop();
int temp3=num.pop();
if(temp1=='-')
num.push(temp3-temp2);
else
num.push(temp3+temp2);
}
}
else if(s.charAt(i)>='0' && s.charAt(i)<='9'){
StringBuffer temp4=new StringBuffer();
for(int k=i;k<s.length();k++,i++){
if(s.charAt(k)>='0' && s.charAt(k)<='9')
temp4.append(s.charAt(k));
else
break;
}
i=i-1;
int temp5=Integer.parseInt(temp4.toString());
if(num.size()>0 && op.peek()!='('){
int temp6=num.pop();
char temp7=op.pop();
if(temp7=='-')
num.push(temp6-temp5);
else
num.push(temp6+temp5);
}
else
num.push(temp5);
}
}
return num.pop();
}
}