# 227. 基本计算器 II

# 题目

给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。

整数除法仅保留整数部分。

输入:s = 3+2\*2 输出:7

# 题解

#

按照情况入栈即可,(preSign 为每个数之前的符合,第一个数为 +):

  • 如果是数字就更新累计数字,直到遇到符号
  • + - 直接数字前面加符号入栈
  • * / 栈顶元素乘或除当前累计数字结果入栈
/**
 * @param {string} s
 * @return {number}
 */
var calculate = function(s) {
  let preSign = "+";
  let num = 0;
  let stack = [];
  for (let i = 0; i < s.length; ++i) {
    let x = s[i];
    if (!isNaN(x) && x != " ") {
      num = num * 10 + +x;
    }
    if (isNaN(x) || i === s.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));
          break;
      }
      preSign = x;
      num = 0;
    }
  }
  let res = 0;
  while (stack.length) {
    res += stack.pop();
  }
  return res;
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38