LeetCode上逆波兰表达式求值,中等难度,记录下解题思路
逆波兰表示法是将所有操作符置于操作数的后面,因此也被称为后缀表示法。
在这题中就是将表达式存入栈中,每次看到运算符的情况就从栈中拿最后两个元素运算,相当于模拟了括号的作用,最后返回结果,即栈的第一位就能完成运算
var evalRPN = function (tokens) {
// 栈
let stack = []
// 保存数组长度
let len = tokens.length
// 遍历数组
for (let i =0;i<len;i++) {
if (isNaN(Number(tokens[i]))) {
// 如果是运算符的情况
// 取栈最后两个元素运算
let n2 = stack.pop();
let n1 = stack.pop();
switch (tokens[i]) { // 判断运算符类型,算出新数入栈
case "+":
// 加法情况
stack.push(n1 + n2);
break;
case "-":
// 减法情况
stack.push(n1 - n2);
break;
case "*":
// 乘法情况
stack.push(n1 * n2);
break;
case "/":
// 因为除法只需保留整数部分
stack.push(parseInt(n1/n2));
break;
}
} else {
// 如果是数字就放入栈中
stack.push(Number(tokens[i]));
}
}
// 返回结果
return stack[0];
};