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; } }