面试常考!LeetCode 杨辉三角的 Java 顺序表实现详解

杨辉三角简介

杨辉三角是二项式系数在三角形中的几何排列,其第 n 行第 k 个数字对应组合数 C(n-1, k-1)。每一行的首尾数字为 1,中间数字为上一行相邻两个数字之和。

问题描述

LeetCode 题目 118. 杨辉三角 要求生成前 numRows 行的杨辉三角,并以 List<List<Integer>> 形式返回。

实现思路

使用动态规划思想,逐行生成杨辉三角。每一行的生成依赖于前一行的结果,避免重复计算。

Java 实现代码

import java.util.ArrayList;
import java.util.List;

public class Solution {
    public List<List<Integer>> generate(int numRows) {
        List<List<Integer>> triangle = new ArrayList<>();
        
        for (int rowNum = 0; rowNum < numRows; rowNum++) {
            List<Integer> row = new ArrayList<>();
            
            // 每一行的首尾元素为 1
            row.add(1);
            
            // 生成中间元素
            if (rowNum > 0) {
                List<Integer> prevRow = triangle.get(rowNum - 1);
                for (int j = 1; j < rowNum; j++) {
                    row.add(prevRow.get(j - 1) + prevRow.get(j));
                }
                row.add(1);
            }
            
            triangle.add(row);
        }
        
        return triangle;
    }
}

代码解析

  1. 初始化结果列表
    创建一个 List<List<Integer>> 类型的变量 triangle 用于存储最终结果。

  2. 逐行生成杨辉三角
    外层循环控制行数,从第 0 行到第 numRows - 1 行。

  3. 处理每一行
    每一行初始化时先添加首元素 1。如果当前行不是第 0 行,则根据前一行的数据计算中间元素的值。

  4. 中间元素计算
    对于第 i 行(i > 0),中间第 j 个元素的值为前一行第 j - 1 个元素和第 j 个元素之和。

  5. 添加尾元素 1
    每一行的最后一个元素固定为 1。

复杂度分析

  • 时间复杂度:O(numRows²),因为需要生成 numRows 行,每行最多有 numRows 个元素。
  • 空间复杂度:O(numRows²),存储结果所需的空间。

示例输出

对于 numRows = 5,输出结果为:

[
     [1],
    [1,1],
   [1,2,1],
  [1,3,3,1],
 [1,4,6,4,1]
]

边界情况

  • numRows = 0:返回空列表 []
  • numRows = 1:返回 [[1]]

总结

通过动态规划逐行生成杨辉三角,代码简洁高效。面试时需注意边界条件的处理以及代码的可读性。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值