980. Basic Calculator (JavaScript)
题目
描述
Implement a basic calculator to evaluate a simple expression string.
The expression string contains only non-negative integers, +, -, *, / operators and empty spaces . The integer division should truncate toward zero.
You may assume that the given expression is always valid.
样例
"3+2*2" = 7
" 3/2 " = 1
" 3+5 / 2 " = 5
思路
降级运算,把乘除换成加法。
遇到加减符号的把数字直接push进栈,乘除的话先把栈pop出来进行运算后,再进栈。
然后把数组的全部相加即可。
题目中有点坑爹的地方是没注意 You may assume that the given expression is always valid.
所以只要除法的进行舍弃小数点即可。
代码
/** * @param s: the given expression * @return: the result of expression */ const calculate = function (s) { // Write your code here if (s == null || s.length == 0) { return 0; } var len = s.length; var s = s.replace(/\s+/g,''); //用一个数组存储数字,最后相加 var arr = []; //上一次操作数 var num = 0; //标志位 var sign = '+'; for (var i = 0; i < len; i++) { if (!isNaN(s[i])) { //如果为数字,则考虑运算优先级 num = num * 10 + Number(s[i]); } if (s[i] == '+' || s[i] == '-' || s[i] == '*' || s[i] == '/' || i == len -1) { if (sign == '+'){ arr.push(num); } else if (sign == '-'){ arr.push(-num); } else if (sign == '*'){ arr.push(arr.pop() * num); } else{ arr.push(parseInt(arr.pop() / num)); } sign = s[i]; num = 0; } } //计算结果 var count = 0; while (arr.length != 0){ count += arr.pop(); } return count }
吐槽一下

我感觉我就是 个智障

浙公网安备 33010602011771号