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

119. 杨辉三角 II

目录

一、问题描述

二、解题思路

三、代码

四、复杂度分析


一、问题描述

给定一个非负索引 rowIndex,返回「杨辉三角」的第 rowIndex 行。

在「杨辉三角」中,每个数是它左上方和右上方的数的和。

二、解题思路

思路分析:

  • 第 0 行是 [1]

  • 第 1 行是 [1, 1]

  • 第 2 行是 [1, 2, 1]

  • 第 3 行是 [1, 3, 3, 1]

  • 第 4 行是 [1, 4, 6, 4, 1]

每一行的数字规律是:

  • 首尾都是 1

  • 中间的数字 = 上一行的相邻两个数字之和。

做法

  • 初始化第 0 行 [1]

  • 不断推导下一行,一直推到第 rowIndex 行。

三、代码

class Solution {
public:vector<int> getRow(int rowIndex) {vector<int> row = {1}; // 第 0 行就是 [1]for (int i = 1; i <= rowIndex; ++i) {row.push_back(0); // 扩展一位,方便从后往前更新for (int j = i; j > 0; --j) {row[j] = row[j] + row[j-1]; // 从后往前更新,避免覆盖}}return row;}
};

详细解释:

  • row 初始是 [1]

  • 每次扩展一位,比如变 [1, 0]

  • 然后从最后一位往前计算:

    • row[j] = row[j] + row[j-1]

  • 因为从后往前,所以不会覆盖前面需要用的数字。


🧠 举个推导过程例子(比如 rowIndex = 3):

  1. 第 0 行:[1]

  2. 第 1 行:扩展一位 -> [1, 0]

    • j = 1: row[1] = row[1] + row[0] = 0 + 1 = 1[1, 1]

  3. 第 2 行:扩展一位 -> [1, 1, 0]

    • j = 2: row[2] = row[2] + row[1] = 0 + 1 = 1

    • j = 1: row[1] = row[1] + row[0] = 1 + 1 = 2[1, 2, 1]

  4. 第 3 行:扩展一位 -> [1, 2, 1, 0]

    • j = 3: row[3] = row[3] + row[2] = 0 + 1 = 1

    • j = 2: row[2] = row[2] + row[1] = 1 + 2 = 3

    • j = 1: row[1] = row[1] + row[0] = 2 + 1 = 3[1, 3, 3, 1]

最终返回 [1, 3, 3, 1]

四、复杂度分析

  • 时间复杂度:O(rowIndex2)O(rowIndex^2)O(rowIndex2)(两层循环)

  • 空间复杂度:O(rowIndex)O(rowIndex)O(rowIndex)(只用一个数组)

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

相关文章:

  • C++模拟Java C#的 finally
  • 数据结构顺序表的实现
  • PyTorch作为深度学习框架在建筑行业的应用
  • 从基础到实践(三十三):USB接口简介
  • Python文件操作及数据库交互(Python File Manipulation and Database Interaction)
  • 【刷题Day27】Python/JAVA - 01(浅)
  • 状态压缩DP:蒙德里安的梦想
  • 极简桌面app官网版下载 极简桌面最新版 安装包下载
  • 导览项目KD-Tree最近地点搜索优化
  • Java集合复习题目
  • 【matlab】绘制maxENT模型的ROC曲线和omission curve
  • 基于 IPMI + Kickstart + Jenkins 的 OS 自动化安装
  • 如何监控和分析MySQL数据库的性能?
  • 指针遍历数组
  • 如何控制DeepSeek的输出内容之AI时代的流量入口GEO
  • JavaScript基础-运算符的分类
  • HiSpark Studio如何使用Trae(Marscode)插件
  • SpringBoot 常用注解通俗解释
  • puppeteer注入浏览器指纹过CDP
  • linux blueZ 第五篇:高阶优化与性能调优——蓝牙吞吐、延迟与功耗全攻略
  • 详解 Network.framework:iOS 网络开发的新基石
  • Spring进阶篇
  • Java面试高频问题(29-30)
  • 解释PyTorch中的广播机制
  • 如何在 Ubuntu 22.04|20.04|18.04 上安装 PostGIS
  • Docker 学习入门篇:镜像构建、推送与私有仓库搭建全攻略
  • JAVA JVM面试题
  • MQ消息的不可靠性发生情况与解决方案
  • Goland终端PowerShell命令失效
  • YOLOv5修改检测框颜色,粗细,标签大小,标签名称