[路飞]leetcode-227.基本计算器 II

80 阅读1分钟

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

整数除法仅保留整数部分。力扣原文

示例 1:

输入:s = "3+2*2"
输出:7

示例 2:

输入:s = " 3/2 "
输出:1

示例 3:

输入:s = " 3+5 / 2 "
输出:5

const level={
    "@":0,
    "+":1,
    "-":1,
    "*":2,
    "/":2
}
const calc=(num1,oper,num2)=>{
    switch(oper){
        case "+":
            return Math.floor(num1+num2)
        case "-":
            return Math.floor(num1-num2)
        case "*":
            return Math.floor(num1*num2)
        case "/":
            return Math.floor(num1/num2)
    }
    return 0
}
var calculate = function(s) {
    let num=[],oper=[];
    s+="@"
    for(let i=0,count=""; i<s.length ; i++){
        let curItem=s[i]
        if(level[curItem] === undefined){
            count+=curItem
            continue;
        }
        num.push(Math.floor(count))
        count="";
        while(oper.length!==0&& level[curItem] <= level[oper[oper.length-1]] ){
            let b=num.pop();
            let a=num.pop();
            num.push(calc(a,oper[oper.length-1],b))
            oper.pop()
        }
        oper.push(curItem)
    }
    return num[0]
};