- 基本计算器
实现一个基本的计算器来计算一个简单的字符串表达式 s 的值。
示例 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 表示一个有效的表达式
class Solution {
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;
}
}