https://leetcode-cn.com/problems/basic-calculator-ii/
参考leetcode大神写的
+ - ( )(224. 基本计算器) 或者 + - * /(227. 基本计算器 II) 或者有锁题,包含符号 + - * / ( ) 772. 基本计算器 III 亦或是进阶题, 包含自定义函数符号 770. 基本计算器 IV
的表达式
的表达式
双栈解决「通用表达式」问题的通用解法
https://leetcode-cn.com/problems/basic-calculator-ii/solution/shi-yong-shuang-zhan-jie-jue-jiu-ji-biao-c65k/
const readline = require('readline'); const rl = readline.createInterface({ input:process.stdin, output:process.stdout }); const opsMap = {'+':1,'-':1,'*':2,'/':2}; const convert = (inputs) => { if(!inputs.length)return; let ops = []; let temp = []; for(let i = 0; i < inputs.length; i++){ let cs = inputs[i]; if(/\d/.test(cs)){// 数字 temp.push(cs); while(i+1 < inputs.length && /\d/.test(inputs[i + 1])){ temp[temp.length - 1] += inputs[i+1]; i++; } }else if(cs === '('){ // 入栈 操作符 ops.push(cs) if(inputs[i+1]==='+'||inputs[i+1]==='-'){ temp.push('0'); } }else if(cs === ')'){ while(ops.length){ let op = ops.pop(); if(op === '('){ break; }else{ temp.push(op) } } }else{ while(ops.length >= 0){ const topOp = ops[ops.length -1]; if(!ops.length || topOp === '(' || opsMap[cs] > opsMap[topOp]){ ops.push(cs); break; }else{ temp.push(ops.pop()) } } } } while(ops.length){ temp.push(ops.pop()); } return temp; } const calculate = (temp) =>{ if(!temp.length)return 0; let res = [] temp.forEach(i=>{ if(/\d/.test(i)){ res.push(i) }else{ const b = ~~res.pop(); const a = ~~res.pop(); if(i==='+') res.push(a+b); else if(i==='-') res.push(a-b); else if(i==='*') res.push(a*b); else if(i==='/') res.push(a/b); } }) return res.pop(); } rl.on('line',(line)=>{ console.log(calculate(convert(line))) })