import java.util.*; // 参考:https://blog.nowcoder.net/n/b825074c53dc4d178e7f6bde8b8bbbf3 public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * 返回表达式的值 * @param s string字符串 待计算的表达式 * @return int整型 */ public int solve (String s) { // write code here return calc(s,0).get(0); } // 123*(456+789)*1 ArrayList<Integer> calc(String s,int index){ // 栈来存计算后的结果 Stack<Integer> st = new Stack<Integer>(); int num = 0; char op = '+'; int i; for(i = index;i<s.length();i++){ // 依次读取数字 if(s.charAt(i) >= '0' && s.charAt(i) <= '9'){ num = num*10 + s.charAt(i) - '0'; if(i != s.length()-1){ continue; } } // 处理括号 if(s.charAt(i) == '('){ // 递归处理括号内的内容 ArrayList<Integer> res = calc(s,i+1);// 传入当前索引的下一个位置(即i+1) num = res.get(0); i = res.get(1);// 更新i的位置 if(i != s.length()-1){ continue; } } // 处理操作符 + - * switch(op){ case '+': st.push(num); break; case '-': // 负数,取num的相反数 st.push(-num); break; case '*': int temp = st.pop(); st.push(temp * num); break; } num = 0; // 重置 // 递归的结束条件 if(s.charAt(i) == ')'){ break; }else{ op = s.charAt(i); } } int sum = 0; // 栈中元素相加 while(!st.isEmpty()){ sum += st.pop(); } ArrayList<Integer> temp = new ArrayList<>(); temp.add(sum); temp.add(i); return temp; } }