给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。
整数除法仅保留整数部分。
解题思路
这一题可以使用栈来处理:
- 遇到
+、-号: 将数字压入栈中,其中-号需要将数字取反再压入栈中 - 遇到
*、/号: 先从栈顶pop一个元素与当前数字计算,然后压入栈中 - 最后统计栈中所有数字的总和。
代码
var calculate = function(s) {
let stack = [];
let sign = '+';
for(let i = 0, num = 0; i < s.length; i++) {
// 处理数字
if (!isNaN(s[i]) && s[i] !== ' ') {
num = num * 10 + (s[i] - 0)
}
// 处理运算符 或者 当前位置是运算数最后一个数
if (isNaN(s[i]) || i == s.length - 1) {
switch(sign) {
case '+' : stack.push(num);break;
case '-' : stack.push(-num);break;
case '*' : stack.push(stack.pop() * num);break;
case '/' : stack.push(stack.pop() / num | 0);break;
}
num = 0;
sign = s[i];
}
}
let nes = 0;
while(stack.length) {
nes += stack.pop();
}
return nes;
};