-
Notifications
You must be signed in to change notification settings - Fork 27
/
Copy path227.基本计算器II medium.js
78 lines (66 loc) · 1.69 KB
/
227.基本计算器II medium.js
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
/**
* Created by doit on 2020/2/17.
*/
/**实现一个基本的计算器来计算一个简单的字符串表达式的值。
*
* 字符串表达式仅包含非负整数,+, - ,*,/ 四种运算符和空格 。 整数除法仅保留整数部分。
*
* 示例 1:
*
* 输入: "3+2*2"
* 输出: 7
* 示例 2:
*
* 输入: " 3/2 "
* 输出: 1
* 示例 3:
*
* 输入: " 3+5 / 2 "
* 输出: 5
* 说明:
*
* 你可以假设所给定的表达式都是有效的。
* 请不要使用内置的库函数 eval。
*/
/**因为是简单的表达式,没有括号
* 所以考虑先计算高优先级的运算,再计算低优先级的运算即可,即分2次出结果
* @param {string} s
* @return {number}
*/
var calculate = function(s) {
if (!s.length) return 0;
let res;
let stack = [];
let express = s.replace(/\s/g, '').split(/\b/);
for (let i = 0; i < express.length; i++) {
let cur = express[i];
if (['*', '/'].includes(cur)) {
const a = stack.pop();
const b = express[++i];
let temp;
if (cur === '*') temp = +a * +b;
if (cur === '/') temp = parseInt(+a / +b);
stack.push(temp);
continue;
}
stack.push(cur);
}
console.log(stack);
res = stack[0];
for (let i = 0; i < stack.length; i++) {
let cur = stack[i];
if (cur === '+') {
res = +res + +stack[++i];
}
if (cur === '-') {
res = +res - +stack[++i];
}
console.log(res, '---');
}
console.log(res);
return res;
};
// var token = '1+4 / 21 +3 -1';
// var token = '3+5 / 2';
var token = '1-1+1';
calculate(token)