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

相关推荐
小江的记录本1 小时前
【分布式】分布式核心组件——分布式ID生成:雪花算法、号段模式、美团Leaf、百度UidGenerator、时钟回拨解决方案
分布式·后端·算法·缓存·性能优化·架构·系统架构
leobertlan8 小时前
好玩系列:用20元实现快乐保存器
android·人工智能·算法
青梅橘子皮8 小时前
C语言---指针的应用以及一些面试题
c语言·开发语言·算法
_Evan_Yao8 小时前
技术成长周记06|面试中看清差距,新项目点燃热情
面试·职场和发展
_深海凉_9 小时前
LeetCode热题100-有效的括号
linux·算法·leetcode
被开发耽误的大厨11 小时前
1、==、equals、hashCode底层原理?重写场景?
算法·哈希算法
haina201912 小时前
《品牌观察》专访海纳AI:引领AI面试测评新时代
人工智能·面试·职场和发展
WolfGang00732112 小时前
代码随想录算法训练营 Day38 | 动态规划 part11
算法·动态规划
Raink老师12 小时前
【AI面试临阵磨枪】什么是 MCP(Model Control Protocol)、A2A(Agent-to-Agent)协议?
人工智能·面试·职场和发展·ai 面试
松☆13 小时前
C++ 算法竞赛题解:P13569 [CCPC 2024 重庆站] osu!mania —— 浮点数精度陷阱与 `eps` 的深度解析
开发语言·c++·算法