[leetcode]224. Basic Calculator --JavaScript 代码

这道题的tag里写着stack呢,因此,就要考虑使用栈来完成题目。
这道题据说很经典,我在编写计算器的程序时,也遇到过类似的问题。
思路:
当没有遇到运算符的时候,就一直解析字符串中的数字,并将它们转化为真正的数字。如果遇到加号或者减号,就改变标志位,如果遇到括号,就借助栈来完成运算。遇到 “(” 入栈,遇到 “)” 出栈并计算结果。

/**
 * @param {string} s
 * @return {number}
 */
var calculate = function(s) {
    var len = s.length;
    if(len === 0){
        return 0;
    }
    var stack = [];
    var res = 0;
    var sign = 1;
    for(var i=0;ivar n = s.charAt(i);
        if (!isNaN(parseInt(n))){
            var cur = parseInt(n);
            while(i+11))))){
                cur = 10*cur + parseInt(s.charAt(++i));  
            }
            res += sign * cur;
        } else if (n=="-"){
            sign = -1;  
        } else if (n=="+"){
            sign = 1;  
        } else if (n=="("){
            stack.push(res);  
            res = 0;  
            stack.push(sign);  
            sign = 1;
        } else if (n==")"){
            res = stack.pop() * res + stack.pop();  
            sign = 1;
        }
    }
    return res;
};

你可能感兴趣的:(leetcode,JavaScript)