给你一个字符串表达式 s
,请你实现一个基本计算器来计算并返回它的值。
注意:不允许使用任何将字符串作为数学表达式计算的内置函数,比如 eval()
。
示例 1:
输入:s = "1 + 1" 输出:2
示例 2:
输入:s = " 2-1 + 2 " 输出:3
示例 3:
输入:s = "(1+(4+5+2)-3)+(6+8)" 输出:23
提示:
1 <= s.length <= 3 * 105
s
由数字、'+'
、'-'
、'('
、')'
、和' '
组成s
表示一个有效的表达式- ‘+’ 不能用作一元运算(例如, “+1” 和
"+(2 + 3)"
无效) - ‘-‘ 可以用作一元运算(即 “-1” 和
"-(2 + 3)"
是有效的) - 输入中不存在两个连续的操作符
- 每个数字和运行的计算将适合于一个有符号的 32位 整数
Related Topics
等于把括号去掉算出当前+
,-
符号真正对应的加减操作算出来
class Solution {
public int calculate(String s) {
int res = 0;
Stack<Integer> stack = new Stack<>();
stack.push(1);
int idx = -1;
int flag = 1;
while (++idx < s.length()){
char c = s.charAt(idx);
if (c == ' ')continue;
switch (c){
case '+':
flag = stack.peek();
break;
case '-':
flag = -stack.peek();
break;
case '(':
stack.push(flag);
break;
case ')':
stack.pop();
break;
default:
//取到整个数字
int num = c - '0';
while (idx+1 < s.length() && s.charAt(idx+1) - '0'>=0 && s.charAt(idx+1)-'9'<=0){
idx++;
num *= 10;
num += s.charAt(idx) - '0';
}
//取到了整个数字
res += flag * num;
break;
}
}
return res;
}
}
写出来好像和官方题解一样?
发表评论