力扣面试150(45/150)
7.31 150. 逆波兰表达式求值
我的思路:
逆波兰算数表达式:运算符写在后面的
都是双目运算符
栈:2 1 + => 2+1 = 3 push 3 3 * => 3 I* 3 = 9
4 13 5 / => 13 / 5 = 2 push 4 2 + => 4 + 2 = 6
大概想法:push到±*/的时候就要进行运算=>pop两个进行运算,把结果再push到栈当中
我的代码:
var evalRPN = function(tokens) {let numArr = [];const str = ["+" , "-" , "*" , "/"];for(let i = 0; i < tokens.length ; i++){if(str.includes(tokens[i])){let num1 = Number(numArr.pop());let num2 = Number(numArr.pop());let ans = 0;switch(tokens[i]){case "+":ans = num1 + num2;break;case "-":ans = num2 - num1;break;case "*":ans = num1 * num2;break;case "/" :ans = Math.trunc(num2 / num1);break;}console.log(ans);numArr.push(ans);}else {numArr.push(tokens[i]);}}return Number(numArr[0]);};
总结:这段代码实现了一个逆波兰表达式(RPN)计算器。它使用一个栈来处理数字和运算符,遍历输入的 tokens 数组。当遇到数字时,直接压入栈中;当遇到运算符时,从栈中弹出两个数字进行相应运算,注意减法和除法的顺序是后弹出的数操作先弹出的数,除法结果使用 Math.trunc 向零取整。运算结果再压回栈中,最终栈中剩下的唯一数字就是表达式的计算结果。