java实现力扣计算器
代码实现中,若读到一个运算符,或者遍历到字符串末尾,即认为是遍历到了数字末尾。处理完该数字后,更新 preSign为当前遍历的字符。减号的时候则压入-dig即可
class Solution {
public int calculate(String s) {
Stack<Integer> stack = new Stack<Integer>();
char preSign='+';
int sum=0;
int dig=0;
int n=s.length();
for(int i=0;i<n;i++){//为什么是++i
char temp= s.charAt(i);
if(Character.isDigit(temp)){
dig =dig*10+temp-'0';
}
//整体就是一遇到符
//i==n-1是为了达到字符串结尾时将数字放入栈中
if(i==n-1||!Character.isDigit(temp)&& temp != ' ' ){
switch(preSign){
default:
stack.add(dig);
break;
case '-':
stack.add(-dig);
break;
case '*':
stack.add(stack.pop()*dig);
break;
case '/':
stack.add(stack.pop()/dig);
break;
}
preSign=temp;
dig=0;
}
}
for(int number:stack){
sum=sum+number;
}
return sum;
}
}