Implement a basic calculator to evaluate a simple expression string.
The expression string may contain open (
and closing parentheses )
, the plus +
or minus sign -
, non-negative integers and empty spaces .
You may assume that the given expression is always valid.
Some examples:
"1 + 1" = 2 " 2-1 + 2 " = 3 "(1+(4+5+2)-3)+(6+8)" = 23用一个result来计当前的累加结果,用sum来计当前一位的数值
遇到( 将result push 遇到) 说明现在的result 是(..)内部的结果,pop原来的值 进行运算
public class Solution {
public int calculate(String s) {
Stack<Integer> val=new Stack<>();
int sum=0;
int sign=1;
int result=0;
for(int i=0;i<s.length();i++){
char c=s.charAt(i);
if(Character.isDigit(c)){
sum=sum*10+(c-'0');
}
else if(c=='+'){
result+=sign*sum;
sign=1;
sum=0;
}
else if(c=='-'){
result+=sign*sum;
sign=-1;
sum=0;
}
else if(c=='('){
val.push(result);
val.push(sign);
result=0;
sign=1;
}
else if(c==')'){
result+=sign*sum;
result*=val.pop();
result+=val.pop();
sum=0;
}
}
if(sum==0) return result;
else return result+sign*sum;
}
}