224_基本计算器
package 栈; import java.util.Deque; import java.util.LinkedList; import java.util.Stack; /** * https://leetcode-cn.com/problems/basic-calculator/ */ /** * 思路:只有加减法,可以把括号全都展开来写,例如 2 - (1 - 3)展开成 2 - 1 + 3。 * -2 + (-3 + 4) ; -2 - (-3 + 4 ) + 8 * 不断的累加(操作符是当前该数的正负): * 遇到 ( ,把当前的操作符(数的正负) push进去 * 遇到 ) ,说明运算结束,重新获取操作符 * */ public class _224_基本计算器 { public int calculate(String s) { Deque<Integer> ops = new LinkedList<Integer>(); ops.push(1); int sign = 1; int ret = 0; int n = s.length(); int i = 0; while (i < n) { if (s.charAt(i) == ' ') { i++; } else if (s.charAt(i) == '+') { sign = ops.peek(); i++; } else if (s.charAt(i) == '-') { sign = -ops.peek(); i++; } else if (s.charAt(i) == '(') { ops.push(sign); i++; } else if (s.charAt(i) == ')') { ops.pop(); i++; } else { long num = 0; while (i < n && Character.isDigit(s.charAt(i))) { num = num * 10 + s.charAt(i) - '0'; i++; } ret += sign * num; } } return ret; } }