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
Note: Do not use the eval
built-in library function.
代码如下:
public class Solution { public int calculate(String s) { Stack<Integer>stack=new Stack<Integer>(); int ret=0; int num=0; int sign=1; for(int i=0;i<s.length();i++){ char c=s.charAt(i); if(Character.isDigit(c)){ num=10*num+c-'0'; } else if(c=='+'){ ret+=sign*num; num=0; sign=1; }else if(c=='-'){ ret+=sign*num; num=0; sign=-1; }else if(c=='('){ stack.push(ret); stack.push(sign); sign=1; ret=0; }else if(c==')'){ ret+=sign*num; num=0; ret*=stack.pop(); ret+=stack.pop(); } } if(num!=0) ret+=sign*num; return ret; } }
运行结果: