You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LeetCode 118杨辉三角代码输出错误原因咨询

杨辉三角代码异常输出原因

Java中所有对象类型的变量都是引用,存储的是对象在堆内存中的地址,而非对象本身的数据,这是你代码出现错误的核心原因。

你代码的执行逻辑问题如下:

  • 你在循环外仅初始化了一次row对象,全程所有操作都是修改这同一个堆内存中的对象内容
  • 直接调用result.add(row)时,只是把row的引用地址复制了一份存入result,并不会复制row里的实际数据
  • 循环结束后,row的最终内容是[1,4,6,4,1],此时遍历result时,所有位置存的引用都指向这同一个最终状态的对象,所以输出全是相同的最后一行

new ArrayList(row)是调用ArrayList的拷贝构造方法,会新开辟一块堆内存创建一个独立的ArrayList实例,把当前row里的所有元素复制到新实例中。此时你再把新实例的引用存入result,后续对原row的修改就不会影响已经存入result的内容,每一轮存入的都是当前轮次的杨辉三角行快照,结果就符合预期。

修正后的完整代码如下:

class Solution {
    public List<List<Integer>> generate(int numRows) {
        List<List<Integer>> result = new ArrayList();
        List<Integer> row = new ArrayList();
        for(int i = 0; i < numRows; i++ ){
            row.add(0,1);
            for(int j = 1; j < row.size()-1; j++){
                row.set(j, row.get(j) + row.get(j+1));
            }
            // 正确写法:存入当前row的拷贝
            result.add(new ArrayList(row));
        }
        return result;
    }
}

内容的提问来源于stack exchange,提问作者Binky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 10:06:04