Implement a basic calculator to evaluate a simple expression string. The expression string contains only non-negative integers, +, -, *, / operators and empty spaces . The integer division should truncate toward zero.
Example 1: Input: "3+2*2" Output: 7 Example 2: Input: " 3/2 " Output: 1 Example 3: Input: " 3+5 / 2 " Output: 5Note: You may assume that the given expression is always valid. Do not use the eval built-in library function.
在看到数字后的运算符后再根据数字前的运算符来处理该数字
class Solution {
public int calculate(String s) {
Stack<Integer> stack = new Stack<>();
int num = 0;
char sign = '+';
for(int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if(Character.isDigit(c)) {
num = num * 10 + (c - '0');
}
// i == s.length() - 1 是为了能处理到算式最后一个数
// 并且下面的if不能用else if 就是因为算式最后一个是数字时候还得用下面的来接着处理
if(c == '+' || c == '-' || c == '*' || c == '/' || i == s.length() - 1) {
if(sign == '+') {
stack.push(num);
} else if(sign == '-') {
stack.push(-num);
} else if(sign == '*') {
stack.push(stack.pop() * num);
} else if(sign == '/') {
stack.push(stack.pop() / num);
}
num = 0;
sign = c;
}
}
int res = 0;
while(!stack.isEmpty()) res += stack.pop();
return res;
}
}