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

相关推荐
wuweijianlove10 小时前
算法优化中的控制流重构与分支预测机制的技术7
算法·重构
Yuezero_10 小时前
Latent Manifold理论分析
人工智能·算法·机器学习
山北雨夜漫步10 小时前
LangGraph
java·前端·算法
李佳鹏10 小时前
96% 成功率,零标注数据:我用 PCA + Hungarian 解了这道几何题
算法
华盛AI10 小时前
AI大模型竞品Anthropic Claude Opus 4.7深度分析
人工智能·算法
shehuiyuelaiyuehao11 小时前
算法21,搜索插入位置
python·算法·leetcode
夏日听雨眠11 小时前
数据结构(哈希函数)
数据结构·算法·哈希算法
昵称小白11 小时前
栈与单调栈专题
开发语言·算法
心.c11 小时前
RAG文档解析 - pypdf、LlamaParse、DeepDoc、SimpleDirectoryReader到底怎么选?
python·算法·ai
AI科技星11 小时前
基于代数拓扑与等腰梯形素数对网格【乖乖数学】
人工智能·算法·决策树·机器学习·数学建模·数据挖掘·机器人