题目:
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.
class Solution {
public int calculate(String s) {
//算术表达式的实现
//思路:使用标志位
int num=0;
//标志位
int sign=1;
int res=0;
Stack<Integer> stack=new Stack<>();
for(char c:s.toCharArray()){
if(c>='0'&&c<='9'){
num=10*num+(c-'0');
}else if(c=='+'){
res+=sign*num;
//初始化
sign=1;
num=0;
}else if(c=='-'){
res+=sign*num;
sign=-1;
num=0;
}else if(c=='('){
//开括号,将标志位和结果放入stack
//当遇到),就取出结果来进行res的重新计算
stack.push(res);
stack.push(sign);
res=0;
sign=1;
}else if(c==')'){
res+=sign*num;
sign=1;
num=0;
//取出闭括号对应的结果
res=res*stack.pop()+stack.pop();
}
}
//最后的数字
res+=sign*num;
return res;
}
}