递归+栈实现一个基本计算器
//实现一个基本计算器
public int calculate(String s){
Deque<Character> str = new ArrayDeque<>();
for(char c:s.toCharArray()){
str.addLast(c);
}
return helper(str);
}
public int helper(Deque<Character> str){
Deque<Integer> stk = new ArrayDeque<>(); //栈
char sign = '+';
int num = 0;
while(str.size()>0){
char c = str.removeFirst();
if(Character.isDigit(c)){
num = num*10 + (c-'0');
}
if(c=='('){
num = helper(str);
}
if( (!Character.isDigit(c) && c!=' ') || str.size()==0){
if(sign=='+'){
stk.push(num);
}else if(sign=='-'){
stk.push(-num);
}else if(sign=='*'){
int p = stk.pop();
stk.push(p*num);
}else if(sign=='/'){
int p = stk.pop();
stk.push(p/num);
}
num = 0;
sign = c;
}
if(c==')'){
break;
}
}
int res = 0;
while(!stk.isEmpty()){
res += stk.pop();
}
return res;
}