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

相关推荐
猿人谷3 小时前
不只是 CPU 阈值:STAR 如何用 GAT + Transformer 做容器级自动扩缩容?
人工智能·算法
复杂网络5 小时前
Stable Diffusion 视觉大模型微调技术深度调研
算法
复杂网络5 小时前
基于 Stable Diffusion 架构的视觉大模型代表性工作与原理深度解析
算法
MrZhao4005 小时前
Agent Loop 如何用 Hook 扩展:权限、日志与工具拦截
算法
MrZhao4005 小时前
Agent 为什么需要 Skills:别把所有知识都塞进 system prompt
算法
JieE2122 天前
LeetCode 101. 对称二叉树|JS 递归 + 迭代双解法,彻底搞懂镜像判断
javascript·算法
JieE2123 天前
LeetCode 56. 合并区间|超清晰 JS 图解思路,面试高频区间题
javascript·算法·面试
Jack203 天前
HarmonyOS开发中错误处理策略:网络异常统一处理
算法
小小杨树3 天前
读懂色彩:拍照调色不再难
算法·计算机视觉·配色
JieE2124 天前
LeetCode 226. 翻转二叉树|JS 递归超详细拆解,二叉树入门经典题
javascript·算法