当前位置: 首页 > ai >正文

LeetCode 热题 100 118. 杨辉三角

LeetCode 热题 100 | 118. 杨辉三角

大家好,今天我们来解决一道经典的算法题——杨辉三角。这道题在 LeetCode 上被标记为简单难度,要求生成杨辉三角的前 numRows 行。杨辉三角是一个经典的组合数学问题,每一行的数字都是其正上方和正左上方的数字之和。下面我将详细讲解解题思路,并附上 Python 代码实现。


问题描述

给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。在杨辉三角中,每个数字是其正上方和正左上方的数字之和。

示例 1:

输入: numRows = 5
输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]

示例 2:

输入: numRows = 1
输出: [[1]]

提示:

  • 1 <= numRows <= 30

解题思路

核心思想
  1. 逐行生成

    • 每一行的第一个和最后一个数字都是 1
    • 中间的数字可以通过上一行的相邻两个数字相加得到。
  2. 动态规划

    • 使用一个二维列表 triangle 来存储杨辉三角的每一行。
    • 每一行的生成依赖于上一行的值。

Python代码实现

def generate(numRows):# 初始化杨辉三角triangle = []for i in range(numRows):# 每一行的第一个和最后一个数字都是 1row = [1] * (i + 1)# 计算中间的数字for j in range(1, i):row[j] = triangle[i - 1][j - 1] + triangle[i - 1][j]# 将当前行加入杨辉三角triangle.append(row)return triangle# 测试示例
numRows1 = 5
numRows2 = 1result1 = generate(numRows1)
result2 = generate(numRows2)print(result1)  # 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]
print(result2)  # 输出: [[1]]

代码解析

  1. 初始化杨辉三角

    • 使用一个二维列表 triangle 来存储每一行。
  2. 逐行生成

    • 每一行的第一个和最后一个数字都是 1
    • 中间的数字通过上一行的相邻两个数字相加得到。
  3. 动态规划

    • 每一行的生成依赖于上一行的值,因此我们逐行构建杨辉三角。

复杂度分析

  • 时间复杂度:O(numRows²),其中 numRows 是杨辉三角的行数。我们需要逐行生成每一行的数字。
  • 空间复杂度:O(numRows²),用于存储杨辉三角的每一行。

示例运行

示例 1
输入: numRows = 5
输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]
示例 2
输入: numRows = 1
输出: [[1]]

总结

通过逐行生成的方法,我们可以高效地构建杨辉三角。这种方法直观且易于实现,适合大多数场景。希望这篇题解对大家有所帮助,如果有任何问题,欢迎在评论区留言讨论!

关注我,获取更多算法题解和编程技巧!

http://www.xdnf.cn/news/4006.html

相关文章:

  • boke luntan shop edu自动化脚本
  • 民宿管理系统5
  • WidowX-250s 机械臂的简单数字孪生案例
  • 【NLP】 31. Retrieval-Augmented Generation(RAG):KNN-LM, RAG、REALM、RETRO、FLARE
  • 【渗透测试】Web服务程序解析漏洞原理、利用方式、防范措施
  • C++进阶之——多态
  • 【C++项目实战】日志系统
  • WEB表单和表格标签综合案例
  • win10启动项管理在哪里设置?开机启动项怎么设置
  • Android工厂模式
  • 抽奖系统(基于Tkinter)
  • 微服务项目中网关服务挂了程序还可以正常运行吗
  • 数学复习笔记 2
  • JAVA在线考试系统考试管理题库管理成绩查询重复考试学生管理教师管理源码
  • JobHistory Server的配置和启动
  • LCD,LED
  • 期末项目Python
  • GoogleTest:GMock初识
  • 嵌入式开发学习日志Day13
  • window 系统 使用ollama + docker + deepseek R1+ Dify 搭建本地个人助手
  • C++笔记之接口`Interface`
  • 恶心的win11更新DIY 设置win11更新为100年
  • 《赤色世界》彩蛋
  • 数据封装的过程
  • 分析atoi(),atol()和atof()三个函数的功能
  • 【今日三题】小红的口罩(小堆) / 春游(模拟) / 数位染色(01背包)
  • 【Bootstrap V4系列】学习入门教程之 组件-卡片(Card)
  • Linux怎么更新已安装的软件
  • sudo useradd -r -s /bin/false -U -m -d /usr/share/ollama ollama解释这行代码的含义
  • 1.openharmony环境搭建