解题思路
- 去除所有的空格
- 对于 ‘42’ 连续的数字需要进行保存到 num
- stack 栈维护需要进行计算的数字只进行累加操作
- 遍历到最后一个时,需要注意进行一次操作符的运算
- 最后 ans 计算 stack的累加值即可
代码
var calculate = function (s) {
s = s.replaceAll(" ", "")
const stack = []
let op = '+'
let num = 0
const toNum = (n) => Number(n)
const isNumber = (c) => !Number.isNaN(toNum(c))
for (let i = 0; i < s.length; i++) {
const char = s[i]
if (isNumber(char)) {
num = num * 10 + toNum(char)
}
const isOp = () => !isNumber(char) || i === s.length - 1
if (isOp()) {
switch (op) {
case '+':
stack.push(num)
break
case '-':
stack.push(-num)
break
case '*':
stack.push(stack.pop() * num)
break
case '/':
num = parseInt(stack.pop() / num)
stack.push(num)
break
}
num = 0
op = char
}
}
let ans = 0
while (stack.length) {
ans += stack.pop()
}
return ans
};