# 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
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
← 226. 翻转二叉树 234. 回文链表 →