Skip to content

力扣链接: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)
};