题目描述:
给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。
提示:
- 1 <= s.length <= 3 * 105
- s 由数字、’+’、’-’、’(’、’)’、和 ’ ’ 组成
- s 表示一个有效的表达式
示例 1:
输入:s = “1 + 1”
输出:2
示例 2:
输入:s = " 2-1 + 2 "
输出:3
示例 3:
输入:s = “(1+(4+5+2)-3)+(6+8)”
输出:23
代码如下:
class Solution {
public int calculate(String s) {
Deque<Character> deque = new LinkedList<>();
for (char c : s.toCharArray()) {
deque.offer(c);
}
return sum(deque);
}
public int sum(Deque<Character> deque) {
Stack<Integer> stack = new Stack<>();
char sign = '+';
int num = 0;
int res = 0;
while (!deque.isEmpty()) {
char c = deque.poll();
if (Character.isDigit(c)) {
num = num * 10 + c - '0';
}
if (c == '(') {
num = sum(deque);
}
if ((!Character.isDigit(c) && c != ' ') || deque.isEmpty()) {
if (sign == '+') {
stack.push(num);
} else if (sign == '-') {
stack.push(-num);
} else if (sign == '*') {
stack.push(stack.pop() * num);
} else if (sign == '/') {
stack.push(stack.pop() / num);
}
num = 0;
sign = c;
}
if (c == ')') {
break;
}
}
for (int i : stack) {
res += i;
}
return res;
}
}