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
}

 

吐槽一下

 

我感觉我就是 个智障

posted @ 2018-08-07 01:41  chobyn  阅读(80)  评论(0)    收藏  举报