2020-05-28
逆波兰表达式求值
根据逆波兰表示法,求表达式的值。
有效的运算符包括 +, -, *, / 。
每个运算对象可以是整数,也可以是另一个逆波兰表达式。
说明:
- 整数除法只保留整数部分。
- 给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。
题解:
思路1:栈
/** * @param {string[]} tokens * @return {number} */ var evalRPN = function (tokens) { let stack = [], re = /^[+-*/]$/, tmp1, tmp2; for (let i = 0; i < tokens.length; i++) { if (re.test(tokens[i])) { // 2、如果是+-*/ 那么最后两项出栈与改运算符运算 运算的结果再推入栈中 tmp2 = stack.pop(); tmp1 = stack.pop(); if (tokens[i] === '+') stack.push(tmp1 + tmp2); else if (tokens[i] === '-') stack.push(tmp1 - tmp2); else if (tokens[i] === '*') stack.push(tmp1 * tmp2); else if (tokens[i] === '/') { // 如果是除法 要判断最后的值是否大于0 大于0向下取整 小于0向上 if (tmp1 / tmp2 > 0) stack.push(Math.floor(tmp1 / tmp2)); else stack.push(Math.ceil(tmp1 / tmp2)); } } else { stack.push(parseInt(tokens[i])); // 1、如果遍历到的项是数字项 推入栈中 } } return stack[0]; };