leetcode题解118-杨辉三角
发布日期:2025-04-05 04:53:41 浏览次数:9 分类:精选文章

本文共 1668 字,大约阅读时间需要 5 分钟。

杨辉三角的前numRows行生成

在杨辉三角中,每个数是它左上方和右上方的数的和。本题可以通过动态规划法来解决这个问题。以下是实现步骤:

  • 特殊情况处理

    • 当numRows为0时,返回空集合。
    • 当numRows为1时,返回[[1]]。
    • 当numRows为2时,返回[[1], [1,1]]。
  • 动态规划法

    • 初始化一个二维数组nums,其中nums[i][j]表示杨辉三角的第i行第j列元素。
    • 第0行和第1行的值预先初始化为nums[0][0] = 1,nums[1][0] = 1,nums[1][1] = 1。
    • 对于i >= 2的行,nums[i][0]和nums[i][i]设为1。
    • 对于中间的j位置,nums[i][j] = nums[i-1][j-1] + nums[i-1][j]。
  • 结果转换

    • 将二维数组转换为列表形式,通过循环生成每一行的列表。
    • 将结果按顺序添加到最终的结果列表中。
  • 以下是具体代码实现:

    import java.util.ArrayList;import java.util.List;public class Solution {    public List
    > generate(int numRows) { List
    > lists = new ArrayList<>(); if (numRows == 0) { return lists; } if (numRows == 1) { List
    list = new ArrayList<>(); list.add(1); lists.add(list); return lists; } if (numRows == 2) { List
    list1 = new ArrayList<>(); list1.add(1); List
    list2 = new ArrayList<>(); list2.add(1); list2.add(1); lists.add(list1); lists.add(list2); return lists; } int[][] nums = new int[numRows][numRows]; nums[0][0] = 1; nums[1][0] = 1; nums[1][1] = 1; for (int i = 2; i < numRows; i++) { nums[i][0] = 1; nums[i][i] = 1; for (int j = 1; j < i; j++) { nums[i][j] = nums[i-1][j-1] + nums[i-1][j]; } } for (int i = 0; i < numRows; i++) { List
    list = new ArrayList<>(); for (int j = 0; j <= i; j++) { list.add(nums[i][j]); } lists.add(list); } return lists; }}

    代码解释:

  • 初始化处理:首先处理了三种特殊情况,确保小规模的numRows值能够正确返回。
  • 二维数组初始化:创建了一个二维数组nums,并预先初始化了对角线和第一列的元素。
  • 填充矩阵:使用双重循环,从第2行开始,逐步填充每个元素的值,确保每个元素都是其左上方和右上方元素的和。
  • 转换为列表:通过遍历二维数组,将其转换为多个列表,每个列表表示杨辉三角的一行。
  • 这个方法利用了动态规划的思想,通过逐步构建杨辉三角的每一行,确保了结果的正确性和效率。

    上一篇:leetcode题解119-杨辉三角II
    下一篇:leetcode题解108-将有序数组转换为二叉排序树

    发表评论

    最新留言

    路过按个爪印,很不错,赞一个!
    [***.219.124.196]2025年04月17日 19时52分08秒