基本计算器
题目描述:
题目来源:力扣
给定一个包含正整数、加(+)、减(-)、乘(*)、除(/)的算数表达式(括号除外),计算其结果。
表达式仅包含非负整数,+, - ,*,/ 四种运算符和空格 。
整数除法仅保留整数部分。
示例 1: 输入: "3+2*2" 输出: 7
示例 2: 输入: " 3/2 " 输出: 1
示例 3: 输入: " 3+5 / 2 " 输出: 5
说明:
你可以假设所给定的表达式都是有效的。
请不要使用内置的库函数 eval。
JAVA版代码:
class Solution {
public int calculate(String s) {
// 数字栈
Stack<Integer> stackNum = new Stack<>();
// 前一个符号
char preSign = '+';
int num = 0;
// 替换空格后,一定要加 s=..
s = s.replaceAll(" ","");
for (int i = 0; i < s.length(); i++) {
char ch = s.charAt(i);
// 如果是数字,处理多位数问题
if (Character.isDigit(ch)) {
num = num * 10 + (ch - '0');
}
// 如果是符号,或者最后一次,最后一次很重要!!!
if (!Character.isDigit(ch) || i == s.length() - 1) {
if (preSign == '+') {
stackNum.push(num);
} else if (preSign == '-') {
stackNum.push(-num);
} else if (preSign == '*') { // 优先级高,直接计算
stackNum.push(stackNum.pop() * num);
} else if (preSign == '/') { // 优先级高,直接计算
stackNum.push(stackNum.pop() / num);
}
// 将当前符号保存
preSign = ch;
num = 0;
}
}
int result = 0;
while (!stackNum.isEmpty()) {
result += stackNum.pop();
}
return result;
}
}