给定一个包含正整数、加(+)、减(-)、乘( * )、除(/)的算数表达式(括号除外),计算其结果。
表达式仅包含非负整数,+, - ,*,/ 四种运算符和空格 。 整数除法仅保留整数部分。
leetcode
解题思路:模拟CPU进行运算的方式,利用栈的思想。遍历字符串,如果遇到符号,则读取下一个数字,然后判断符号。
- 如果是乘除,那么直接拿这个数字和栈顶元素运算。
- 如果是减号,则将当前元素变为负数。
- 如果是加号,则不操作。
运算完成符号之后,再将处理过的数值放到栈顶。
最后完成遍历,将栈中的元素都累加即可。
class Solution {
public int calculate(String s) {
Deque<Integer> stack = new LinkedList<>();
s = s.trim();
int ans = 0, i = 0;
while(i < s.length()) {
char temp = s.charAt(i);
if(temp == ' ') {
i ++;
continue;
}
if(temp < '0' || temp > '9') {
i++;
while(i < s.length() && s.charAt(i) == ' ') i++;
}
int cur = i;
while(i < s.length() && Character.isDigit(s.charAt(i))) {
i++;
}
int num = Integer.parseInt(s.substring(cur, i));
if(temp == '-') {
num = -num;
} else if(temp == '*') {
num = stack.pop() * num;
} else if(temp == '/') {
num = stack.pop() / num;
}
stack.push(num);
}
while(!stack.isEmpty()) ans += stack.pop();
return ans;
}
}