2021/03/20 每日一题 逆波兰表达式求值

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]; 
};
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容