示例 1:
输入:s = "3+2*2"
输出:7
示例 2:
输入:s = " 3/2 "
输出:1
示例 3:
输入:s = " 3+5 / 2 "
输出:5
示例 4:
输入:s = " 1-1+1 "
输出:1
实现:
var calculate = function(s) {
// 1、去除空格
s = s.replace(/\s/g,'');
// 2、定义正则匹配
let reg = /(\d+|\+|\-|\*|\/)/g;
let record = s.match(reg);
let numStack = [],opStack = [];
function calcFunc() {
let num2 = parseInt(numStack.pop());
let num1 = parseInt(numStack.pop());
let op = opStack.pop();
if(op=='+'){
numStack.push(num1+num2)
}else if(op=='-'){
numStack.push(num1-num2)
}else if(op=='*'){
numStack.push(num1*num2)
}else if(op=='/'){
numStack.push(Math.floor(num1/num2))
}
}
for(let i=0;i<record.length;i++){
let item = record[i];
if(item=='+'||item=='-'){
while(opStack.length>0&&(opStack[opStack.length-1]=='*'||opStack[opStack.length-1]=='/')){
calcFunc()
}
while(opStack.length>0){
calcFunc()
}
opStack.push(item)
}else if(item=='*'||item=='/'){
while(opStack.length>0&&(opStack[opStack.length-1]=='*'||opStack[opStack.length-1]=='/')){
calcFunc()
}
opStack.push(item)
}else{
numStack.push(item)
}
}
while(opStack.length>0){
calcFunc();
}
return numStack.pop();
};
网友评论