/* * 224. Basic Calculator * 12.10 by Mingyang * 先把所有的该计算的都计算了,遇到符号就sign赋值,遇到数字就直接取结果 * 最关键的是遇到括号以后,左边括号就把result和sign分别存stack里面,然后继续归零 * 遇到右括号就把result和stack分别计算,最后return result * 注意:所有括号前面都有一个符号,所以都要重新赋值 */ public static int calculate(String s) { int len = s.length(), sign = 1, result = 0; Stack<Integer> stack = new Stack<Integer>(); for (int i = 0; i < len; i++) { if (Character.isDigit(s.charAt(i))) { int sum = s.charAt(i) - '0'; while (i + 1 < len && Character.isDigit(s.charAt(i + 1))) { sum = sum * 10 + s.charAt(i + 1) - '0'; i++; } result += sum * sign; } else if (s.charAt(i) == '+') sign = 1; else if (s.charAt(i) == '-') sign = -1; else if (s.charAt(i) == '(') { stack.push(result); stack.push(sign); result = 0; sign = 1; } else if (s.charAt(i) == ')') { result = result * stack.pop() + stack.pop(); } } return result; }