[路飞]_leetcode_227.基本计算器 II

96 阅读1分钟

给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。

整数除法仅保留整数部分。

解题思路

这一题可以使用栈来处理:

  1. 遇到+-号: 将数字压入栈中,其中-号需要将数字取反再压入栈中
  2. 遇到*/号: 先从栈顶pop一个元素与当前数字计算,然后压入栈中
  3. 最后统计栈中所有数字的总和。

代码

var calculate = function(s) {
    let stack = [];
    let sign = '+';
    for(let i = 0, num = 0; i < s.length; i++) {
        // 处理数字
        if (!isNaN(s[i]) && s[i] !== ' ') {
            num = num * 10 + (s[i] - 0)
        }
        // 处理运算符 或者 当前位置是运算数最后一个数
        if (isNaN(s[i]) || i == s.length - 1) {    
            switch(sign) {
                case '+' : stack.push(num);break;
                case '-' : stack.push(-num);break;
                case '*' : stack.push(stack.pop() * num);break;
                case '/' : stack.push(stack.pop() / num | 0);break;
            }
            num = 0;
            sign = s[i];
        }
    }
    
    let nes = 0;
    while(stack.length) {
        nes += stack.pop();
    }
    return nes;
};