隐藏用户y 2024-06-07 20:28 采纳率: 65.5%
浏览 1

算法题150逆波兰表达式相关问题

算法题150逆波兰表达式下面的代码有什么问题,未通过测试用例tokens =[2,1,+,3,*](去除了双引号不然无法通过)


var evalRPN = function (tokens) {
    let res = [];
    for (i of tokens) {
        if (i == '+' || i == '-' || i == '*' || i == '/') {
            num1 = res.pop()
            num2 = res.pop()
            if (i == '+') {
                res.push(num1 + num2)
            }
            else if (i == '-') {
                res.push(num1 - num2)
            }
            else if (i == '*') {
                res.push(num1 * num2)
            }
            else if (i == '/') {
                res.push(num1 / num2)
            }

        } else {
            res.push(i)
        }
    }
    return res.pop();
};
  • 写回答

2条回答 默认 最新

  • 阿里嘎多学长 2024-06-07 20:28
    关注

    以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


    你的代码中存在几个问题,我将逐一指出并提供修复建议:

    1. 变量 i 应该使用 letconst 声明,以避免使用未声明的变量。
    2. 变量 num1num2 也应该使用 letconst 声明。
    3. 你的代码没有处理除以零的情况,这在逆波兰表达式计算中是一个潜在的问题。
    4. 你的代码没有考虑输入数组 tokens 可能为空的情况。

    下面是修复后的代码:

    var evalRPN = function (tokens) {
        let res = [];
        for (let i of tokens) {
            if (i === '+' || i === '-' || i === '*' || i === '/') {
                let num1 = res.pop();
                let num2 = res.pop();
                if (num2 === 0 && i === '/') {
                    throw new Error("Division by zero error.");
                }
                if (i === '+') {
                    res.push(num2 + num1);
                } else if (i === '-') {
                    res.push(num2 - num1);
                } else if (i === '*') {
                    res.push(num2 * num1);
                } else if (i === '/') {
                    res.push(num2 / num1);
                }
            } else {
                res.push(parseInt(i, 10)); // 确保数字是整数
            }
        }
        return res.pop();
    };
    

    请注意,我使用了 parseInt 来确保数组中的数字是整数。如果你的逆波兰表达式中包含浮点数,你需要使用 parseFloat 替代 parseInt

    另外,我将运算符操作的顺序调整为 num2num1,以确保符合数学中的运算顺序(即先弹出的数 num2 作为操作数2,后弹出的数 num1 作为操作数1)。

    关于参考资料,你可以查看以下链接来了解更多关于逆波兰表达式的信息:

    这些资源可以帮助你更好地理解逆波兰表达式的概念和如何实现它们。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 6月7日

悬赏问题

  • ¥15 有可能用平板通过拓展坞来烧录程序吗(keil5的那种)
  • ¥15 网络分析设施点无法识别
  • ¥15 状态图的并发态问题咨询
  • ¥15 PFC3D,plot
  • ¥15 VAE模型编程报错无法解决
  • ¥100 基于SVM的信息粒化时序回归预测,有偿求解!
  • ¥15 物体组批优化问题-数学建模求解答
  • ¥350 麦克风声源定位坐标不准
  • ¥15 apifox与swagger使用
  • ¥15 egg异步请求返回404的问题