150.逆波兰表达式求值

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];
};

 

posted @ 2020-05-28 09:43  蓝小胖纸  阅读(170)  评论(0编辑  收藏  举报