【LeetCode】118.杨辉三角

题目

要求:给定非负整数 numRows,生成杨辉三角的前 numRows 行;

每个数等于它左上方和右上方的数之和。

示例:numRows=5 输出 [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]

思路:按行迭代

  • 先创建二维列表 pascalTriangle 用来存所有行。
  • 手动初始化第 1 行:新建 row0=[1],加入 pascalTriangle
  • 从第 2 行开始用 for (i=1; i<numRows; i++) 逐行生成(i 是行下标):
    • 首:手动add(1)
    • 中间:上一行第 j 个元素 + 上一行第 (j-1) 个元素
    • 尾:手动add(1)

补充:这份写法默认 numRows>=1,否则会先加第一行导致结果不符合题意。需要在开头加 if (numRows==0) return new ArrayList<>();

https://leetcode.cn/problems/pascals-triangle/description/

code

java 复制代码
class Solution {
    public List<List<Integer>> generate(int numRows) {
        // 用来存放最终结果:杨辉三角的每一行都是一个 List<Integer>
        List<List<Integer>> pascalTriangle = new ArrayList<>();

        // 第 1 行(下标 0):固定为 [1]
        List<Integer> row0 = new ArrayList<>();
        row0.add(1);
        pascalTriangle.add(row0);

        // 从第 2 行开始生成(i 表示行下标:1 -> 第2行,2 -> 第3行 ...)
        for (int i = 1; i < numRows; i++) {

            List<Integer> tmpRow = new ArrayList<>();

            // 每一行的第 1 个元素固定是 1
            tmpRow.add(1);

            // 取出上一行,用来计算当前行的中间元素
            List<Integer> preRow = pascalTriangle.get(i - 1);

            // 计算中间元素:
            // 当前行第 j 个元素 = 上一行第 j 个元素 + 上一行第 (j-1) 个元素
            // j 从 1 到 i-1(不包含两侧的 1)
            for (int j = 1; j < i; j++) {
                tmpRow.add(preRow.get(j) + preRow.get(j - 1));
            }

            // 每一行的最后 1 个元素固定是 1
            tmpRow.add(1);

            // 把当前行加入结果
            pascalTriangle.add(tmpRow);
        }

        // 返回完整的杨辉三角
        return pascalTriangle;
    }
}

补充:这段代码默认 numRows >= 1;如果可能传入 0,需要在开头加判断直接返回空列表。

相关推荐
hetao17338372 分钟前
校内场-提高组 ZYZSC-S-Round 4
c++·算法
彧azz30 分钟前
二叉搜索树学习记录
c语言·数据结构·笔记·算法
手写码匠1 小时前
DeepSeek 函数调用实战:从零搭建一个会“动手“的 AI 助手
人工智能·深度学习·算法·aigc
果壳science2 小时前
《自然本源》如何实现狭义相对论的代数化
笔记·算法·几何学
302wanger3 小时前
分享一个工作习惯:整点看即时消息
算法
洋不写bug4 小时前
排序(一)基础排序,插入|希尔|冒泡|直接选择排序详解
java·算法·排序算法·插入排序·冒泡排序·希尔排序·直接选择排序
牧羊人.3334 小时前
动手学深度学习 03 | 卷积神经网络实现手写数字识别
人工智能·深度学习·神经网络·算法·cnn
AgentMaster5 小时前
数据治理工具选型指南:一套可复用的四阶段决策框架
大数据·数据结构·人工智能·算法
liliangcsdn5 小时前
最终留出样本/样本外测试集-holdout解读
算法
程序员江念5 小时前
【最经典的79个】软件测试面试题(内含答案)提前备战“金九银十”
软件测试·面试·职场和发展