题目描述:
实现一个基本的计算器来计算一个简单的字符串表达式的值。
字符串表达式可以包含左括号 ( ,右括号 ),加号 + ,减号 -,非负整数和空格 。
示例:
输入: "(1+(4+5+2)-3)+(6+8)"
输出: 23
Java代码:
class Solution {
public int calculate(String s) {
Deque<Boolean> dq = new ArrayDeque<>();
int result = 0, opr = 0; //result:当前的结果值,opr:当前的被加/减数
Character op = null; //当前要执行的运算符
for(char c : s.toCharArray()) {
if(c == '+' || c == '-') {
if(op == null) {
//遇到的第一个运算符时,将result置为opr(即运算符左边的数字)
result = opr;
} else {
result = cal(op, result, opr);
}
//根据栈顶元素决定是否反转运算符
op = swap(dq.peek() == null ? false : dq.peek(), c);
opr = 0;
} else if(c == '(') {
dq.push(op != null && op == '-');
} else if(c == ')') {
dq.pop();
} else if(c != ' ') {
opr = opr * 10 + c - '0';
}
}
if(op == null) {
return opr; //算式中没有运算符时,opr就是最终结果
} else {
return cal(op, result, opr);
}
}
char swap(boolean swap, char c) {
if(swap) {
return c == '+' ? '-' : '+';
} else {
return c;
}
}
private int cal(char op, int opr1, int opr2) {
switch(op) {
case '+':
return opr1 + opr2;
case '-':
return opr1 - opr2;
default:
return 0;
}
}
}
网友评论