给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。
整数除法仅保留整数部分。
法1:
使用一个变量preOp记录当前操作数之前的运算符。初始时为‘+’
遍历表达式,若为数字,则计算出数字大小,根据其前面的运算符:
+:入栈
-:其相反数入栈
*:出栈栈顶计算乘法后入栈
/:出栈栈顶计算除法后入栈
最后计算栈中所有元素的和并返回。
class Solution {
public int calculate(String s) {
char[] str = s.toCharArray();
char preOp = '+';
int ans = 0;
Stack<Integer> stack = new Stack<>();
for(int i=0;i<str.length;i++){
if(str[i]==' ')
continue;
int num = 0;
while(i<str.length && Character.isDigit(str[i])){
num = num * 10 + (str[i] - '0');
i++;
}
switch(preOp){
case '+':
stack.push(num);break;
case '-':
stack.push(-num);break;
case '*':
stack.push(stack.pop() * num);break;
case '/':
stack.push(stack.pop() / num);break;
}
if(i < str.length)
preOp = str[i];
}
while(!stack.empty())
ans +=stack.pop();
return ans;
}
}