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

来源:互联网 发布:windows xp outlook 编辑:程序博客网 时间:2024/05/29 16:05

这道题的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;i<len;i++){        var n = s.charAt(i);        if (!isNaN(parseInt(n))){            var cur = parseInt(n);            while(i+1<len && (!isNaN(parseInt(s.charAt(i+1))))){                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;};
0 0