力扣链接:227.基本计算器II
难度:⭐⭐
解题关键词:栈
解题思路:将数字不断入栈,拿一个 flag 记录符号是啥,然后不断将数字放到栈中,如果是-号,那么将数字变为负数放进去,如果是乘号,将栈顶元素弹出与当前元素乘完再入栈,除法一样。最后将栈中元素直接相加就可以了。
typescript
function calculate(s: string): number {
const length = s.length
const stack: number[] = []
// 记录每个数字前的符号
let preSign = '+'
// 用来计算每个数字
let num = 0
for (let i = 0; i < length; i++) {
// 如果是数字
if (!isNaN(Number(s[i])) && s[i] !== ' ') {
num = num * 10 + s[i].charCodeAt(0) - '0'.charCodeAt(0)
}
// 如果是符号/最后一位
if (isNaN(Number(s[i])) || i === length - 1) {
switch (preSign) {
case '+':
stack.push(num)
break
case '-':
stack.push(-num)
break
case '*':
stack.push(stack.pop() * num)
break
case '/':
stack.push(stack.pop() / num | 0)
}
// 更新符号
preSign = s[i]
// 重置当前的数字
num = 0
}
}
// 累加得到结果
return stack.reduce((pre, cur) => pre + cur, 0)
};