跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Javajava算法

Java 动态列表实现杨辉三角算法解析

杨辉三角的 Java 实现利用 List 嵌套存储二维数据。核心逻辑为每行首尾置 1,中间元素由上一行相邻值相加得出。通过双重循环完成构建,展示动态列表在算法中的应用。

SecGuard发布于 2026/2/18更新于 2026/9/1051 浏览
Java 动态列表实现杨辉三角算法解析

杨辉三角结构示意

杨辉三角是数据结构里的经典题目,考察二维数组和动态列表的操作。今天咱们聊聊怎么用 Java 把它搞定。

杨辉三角规律展示

思路分析

拿到这个题,先别急着写代码,看看规律:

  1. 每一行的第一个和最后一个数字都是 1。
  2. 中间的每个数字等于它上方两数之和。

用 List<List<Integer>> 来存储整个三角最方便,外层循环控制行数,内层循环处理列数。每一行首尾补 1,中间元素通过上一行相邻索引相加得到。

数据生成逻辑

代码实现

这里直接上核心逻辑,注意导入必要的集合类包。

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

public class Test {
    public List<List<Integer>> generate(int numRows) {
        // 定义最终返回的嵌套列表
        List<List<Integer>> ret = new ArrayList<>();
        
        // 第 0 行特殊处理,直接放入 [1]
        if (numRows == 0) return ret;
        
        List<Integer> list0 = new ArrayList<>();
        list0.add(1);
        ret.add(list0);
        
        // 从第 1 行开始计算
        for (int i = 1; i < numRows; i++) {
            List<Integer> curRow = new ArrayList<>();
            
            // 每一行第一个数固定为 1
            curRow.add(1);
            
            // 获取上一行数据用于计算当前中间值
            List<Integer> preRow = ret.get(i - 1);
            
            // 处理中间元素:当前值 = 上一行同索引 + 上一行前一个索引
            for (int j = 1; j < i; j++) {
                int x = preRow.get(j) + preRow.get(j - 1);
                curRow.add(x);
            }
            
            // 每一行最后补 1
            curRow.add(1);
            
            // 将当前行加入结果集
            ret.add(curRow);
        }
        
        return ret;
    }
}

实际运行时会发现,随着行数增加,列表会自动扩容,无需手动管理内存,这正是 Java 集合框架的优势所在。

总结

杨辉三角虽然看起来简单,但它蕴含的数学规律和编程技巧值得我们学习。通过这篇文章,掌握了杨辉三角的基本原理和生成方法,以及二维列表和空间复杂度的基本应用。

目录

  1. 思路分析
  2. 代码实现
  3. 总结

更多推荐文章

查看全部
  • OpenClaw 卸载指南:Windows macOS Linux npm pnpm
  • Whisper.cpp 量化版本清单与 ggml 格式模型下载
  • SGBM 半全局块匹配算法流程详解
  • HTTP 协议深度解析(三):完整 HTTP 服务器实现
  • 使用 FastAPI 和 HTML/CSS/JavaScript 构建博客系统示例
  • Python Scrapy 爬虫入门:爬取网络小说实战
  • 单链表核心操作实现与详解
  • 无人机 5.8G 模拟图传电路设计方案及性能分析
  • Apache IoTDB 架构解析:为何成为时序数据存储优选方案
  • Python 中国节假日日历库使用指南:识别法定节假日与工作日
  • Ubuntu 下 AMD AI MAX 395+ 部署 Qwen 模型与 ROCm 加速实战
  • 2026 年 3 月科技圈大事:AI 从对话走向执行
  • Claude Skills 实战:自动化工具安装与使用指南
  • Kali Linux 入门教程:从零基础到渗透测试实战指南
  • Kimi K2 本地部署实战:llama.cpp、vLLM 与 Docker 方案
  • Java 日期时间 API 详解:从 Date、Calendar 到 java.time
  • OpenClaw 智能体框架入门:环境部署、模型配置与远程访问指南
  • LeetCode 712. 两个字符串的最小 ASCII 删除和:状态压缩优化
  • UI UX Pro Max:AI 辅助专业级 UI 设计工具
  • GitHub Copilot 权限设置与合规管理指南

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online