import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * 返回表达式的值 * @param s string字符串 待计算的表达式 * @return int整型 */ public int solve(String s) { // write code here Stack<Integer> nums = new Stack<>(); Stack<Character> ops = new Stack<>(); Map<Character, Integer> map = new HashMap<>(); map.put('+', 1); map.put('-', 1); map.put('*', 2); s = s.replaceAll(" ", ""); char[] array = s.toCharArray(); nums.push(0); for (int i = 0; i < array.length; i++) { if (array[i] == '(') { ops.push(array[i]); } else if (array[i] == ')') { while (!ops.isEmpty() && ops.peek() != '(') { Calculate(nums, ops); } ops.pop(); } else if (Character.isDigit(array[i])) { int n = 0; while (i < array.length && Character.isDigit(array[i])) { n = n * 10 + array[i++] - '0'; } nums.push(n); i--; } else { if (!ops.isEmpty() && map.containsKey(ops.peek()) && map.get(ops.peek()) >= map.get(array[i])) { Calculate(nums, ops); } ops.push(array[i]); } } while (!ops.isEmpty()) { Calculate(nums, ops); } return nums.pop(); } public void Calculate(Stack<Integer> nums, Stack<Character> ops) { if (nums.size() < 2 || ops.isEmpty()) { return; } else { int n2 = nums.pop(), n1 = nums.pop(), ans = 0; char op = ops.pop(); switch (op) { case '+': ans = n1 + n2; break; case '-': ans = n1 - n2; break; case '*': ans = n1 * n2; break; default: break; } nums.push(ans); } } }