原题入口
978. 基础计算器
中文English
实现一个基础的计算器来计算一个简单表达式。
这个表达式字符串可能包含左括号 ‘(’ 与右括号 ‘)’,加号 ‘+’ 或者 减号 ‘-’,非负整数以及空格 ’ '。
给出的表达式总是合理的。
样例
样例 1
输入:“1 + 1”
输出:2
样例 2
输入:"(1+(4+5+2)-3)+(6+8)"
输出:23
注意事项
请 不要 使用内置用来计算字符串表达式的函数
public class Solution {
/**
* @param s: the given expression
* @return: the result of expression
*/
public int calculate(String s) {
// Write your code here
Stack<Integer> stack = new Stack<Integer>();
int result = 0;
int sign = 1;
int number = 0;
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
switch (c) {
case '+':
result += sign * number;
number = 0;
sign = 1;
break;
case '-':
result += sign * number;
number = 0;
sign = -1;
break;
case '(':
stack.push(result);//将当前的值与符号入栈
stack.push(sign);
sign = 1;
result = 0;
break;
case ')':
result += sign * number;
number = 0;
result *= stack.pop();//给括号内计算出的值拼接符号
result += stack.pop();//整合栈内的值与括号包括的结果
case ' ':
break;
default:
number = 10 * number + (int)(c - '0');
}
}
if (number != 0) {
result += sign * number;
}
return result;
}
}