import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
* 返回表达式的值
* @param s string字符串 待计算的表达式
* @return int整型
*/
public int solve (String s) {
// write code here
ArrayList<Integer> result = cal(s,0);
return result.get(0);
}
public ArrayList<Integer> cal(String s, int start){
char cur;
int num = 0;
char opt = '+';
ArrayList<Integer> result = new ArrayList<>();
LinkedList<Integer> stack = new LinkedList<>();
int i;
for(i = start; i < s.length(); i++){
cur = s.charAt(i);
//若是左括号就开始递归
//若是右括号就结束递归
//若是数字就加载连续的所有数字
//若是符号就设为opt
if(cur == '('){
result = cal(s,i+1);
num = result.get(0);
i = result.get(1);
if(i!=s.length()-1){
continue;
}
}
if(cur>='0' && cur<='9'){
num = num*10 + (cur-'0');
if(i!=s.length()-1){
continue;
}
}
switch(opt){
case '+':
stack.push(num);
break;
case '-':
stack.push(-num);
break;
case '*':
int temp = stack.pop();
stack.push(num*temp);
break;
}
num=0;
if(cur == ')'){
break;
} else{
opt = cur;
}
}
int sum = 0;
while(!stack.isEmpty()){
sum += stack.pop();
}
result.clear();
result.add(sum);
result.add(i);
return result;
}
}