题目:计算逆波兰式(后缀表达式)的值
运算符仅包含"+","-","*"和"/",被操作数是整数。保证表达式合法,除法时向下取整。
输入:["20","10","+","30","*"]
返回值:900
输入:["20"]
返回值:20
代码如下:
/**
*
* @param tokens string字符串一维数组
* @return int整型
*/
function evalRPN( tokens ) {
let stack = [];
for(let token of tokens) {
if (isOperator(token)) {
let num2 = stack.pop();
let num1 = stack.pop();
switch(token) {
case '+':
stack.push(num1 + num2);
break;
case '-':
stack.push(num1 - num2);
break;
case '*':
stack.push(num1 * num2);
break;
case '/':
stack.push(Math.floor(num1 / num2)); // 这里使用Math.floor进行向下取整
break;
}
} else {
stack.push(parseInt(token));
}
}
return stack.pop();
}
function isOperator(char) {
return char === '+' || char === '-' || char === '*' || char === '/';
}
module.exports = {
evalRPN : evalRPN
};
在 JavaScript 中,我们可以使用一个堆栈来解决逆波兰表达式的问题。我们遍历每个元素,如果它是操作数,就将其压入堆栈,如果它是操作符,就将其与堆栈顶的两个元素进行运算。
在这个代码中,函数接受一个包含操作数和操作符的数组。对于每个元素,它首先检查元素是否是操作符。如果是,它就从堆栈中弹出两个元素,进行相应的运算,然后将结果推回堆栈。如果元素是操作数,它就将其转化为整数并推入堆栈。当所有的元素都处理完之后,堆栈中应该只剩下一个元素,那就是表达式的结果。