【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,需要在开头加判断直接返回空列表。

相关推荐
专注仿真10 小时前
知识问答模型用到的算法集详解及代码实例
python·算法·代码·大模型训练·控制算法
罗西的思考11 小时前
【轻量化复刻大模型 / KIMI K3】AttnRes 模块交互式演示
人工智能·算法·机器学习
好悬给我拽开线14 小时前
ZILOT 论文解析
算法
饮水桶_T16 小时前
JAVA IO流笔记
开发语言·数据结构·算法
星夜离尘5616 小时前
MATLAB 离散数据分箱:半开区间、末端点与计数、加权和、平均
算法·matlab
Pniubi16 小时前
力扣76.最小覆盖子串
算法·leetcode·职场和发展
鸿蒙开发爱好者17 小时前
下班后做的小工具和小游戏,我把它们整理成了 WyanHub
网络·人工智能·职场和发展·个人开发
地平线开发者17 小时前
征程6|用 hrt\_model\_exec 看清 YOLOv5x 的输入、原始输出和后处理
人工智能·算法
csdn_aspnet18 小时前
C++ 3个有序点的方向(Orientation of 3 ordered points)
c++·算法
赤生云电竞18 小时前
GPU算力共享平台架构实践:任务分发与资源隔离的关键配置
算法·架构·gpu算力