基本思路:
因为运算式中没有括号,所以只需要比较 + - * / 的优先级即可,* / 优先计算后再入栈。
class Solution {
public int calculate(String s) {
char[] arr = s.toCharArray();
int len = arr.length;
Deque<Integer> num = new ArrayDeque<>();
Deque<Character> sign = new ArrayDeque<>();
int res = 0;
//数字 和 运算符入栈
for(int i = 0; i < len; i++){
if(Character.isDigit(arr[i]) ){
int cur = 0;
while(i < len && Character.isDigit(arr[i])){
cur = cur * 10 + (arr[i] - '0');
i++;
}
i--;
if(!sign.isEmpty()){
if(sign.peek() == '*'){
sign.pop();
cur = cur * num.pop();
} else if (sign.peek() == '/') {
sign.pop();
cur = num.pop() / cur;
}
}
num.push(cur);
} else if (arr[i] == '+' || arr[i] == '-' || arr[i] == '*' || arr[i] == '/'){
sign.push(arr[i]);
}
}
//顺序取出计算
while(!sign.isEmpty()) {
int a = num.pollLast();
int b = num.pollLast();
if(sign.peekLast() == '-'){
sign.pollLast();
num.addLast(a - b);
} else if (sign.peekLast() == '+'){
sign.pollLast();
num.addLast(b + a);
}
}
return num.poll();
}
}