一、题目

给定一个非负整数 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

二、源代码

int** generate(int numRows, int* returnSize, int** returnColumnSizes) {int** c = malloc(numRows * sizeof(int*));*returnSize = numRows;*returnColumnSizes = malloc(numRows * sizeof(int));for (int i = 0; i < numRows; i++) {(*returnColumnSizes)[i] = i + 1;c[i] = malloc((i + 1) * sizeof(int));c[i][0] = c[i][i] = 1;for (int j = 1; j < i; j++) {// 左上方的数 + 正上方的数c[i][j] = c[i - 1][j - 1] + c[i - 1][j];}}return c;
}

三、解题思路

1.函数参数与返回值

int** generate(int numRows, int* returnSize, int** returnColumnSizes)

功能:生成包含 numRows 行的杨辉三角。

参数:

numRows:需要生成的杨辉三角的行数(输入参数)。

returnSize:用于传出结果的行数(输出参数,最终值等于 numRows)。

returnColumnSizes:用于传出每行的元素个数(输出参数,是一个数组,其中 returnColumnSizes[i] 表示第 i 行的元素数)。

返回值:int** 类型(二维数组),存储生成的杨辉三角。

2.核心逻辑解析

(1)分配二维数组空间(存储杨辉三角)

int** c = malloc(numRows * sizeof(int*));

杨辉三角有 numRows 行,因此先为每行分配一个指针(int* 类型),存储每行的首地址。c 是指向这些指针的指针(二维数组的首地址)。

(2)设置返回的行数

*returnSize = numRows;

通过 returnSize 指针告诉调用者:生成的杨辉三角有 numRows 行。

(3)分配每行的元素个数数组

*returnColumnSizes = malloc(numRows * sizeof(int));

杨辉三角的第 i 行(从 0 开始计数)有 i+1 个元素(例如第 0 行 1 个元素,第 1 行 2 个元素,以此类推)。

这里为存储每行元素个数的数组分配空间(长度为 numRows)。

(4)填充每行数据

for (int i = 0; i < numRows; i++) {

    // 第i行有i+1个元素,记录到returnColumnSizes中

    (*returnColumnSizes)[i] = i + 1;

    

    // 为第i行分配i+1个int的空间

    c[i] = malloc((i + 1) * sizeof(int));

    

    // 每行的第一个和最后一个元素都是1

    c[i][0] = c[i][i] = 1;

    

    // 填充每行中间的元素(j从1到i-1)

    for (int j = 1; j < i; j++) {

        // 中间元素 = 上一行的左上角元素 + 上一行的正上方元素

        c[i][j] = c[i - 1][j - 1] + c[i - 1][j];

    }

}

外层循环 i 遍历每一行(0 到 numRows-1)。

首先记录第 i 行的元素个数为 i+1(存到 returnColumnSizes[i])。

为第 i 行分配 i+1 个 int 的空间(存储该行的具体元素)。

杨辉三角的特性:每行第一个元素(j=0)和最后一个元素(j=i)都是 1,因此直接赋值为 1。

内层循环 j 遍历每行的中间元素(1 到 i-1),这些元素的值等于上一行(i-1)中左侧元素(j-1)和正上方元素(j)的和(核心规则)。

(5)返回结果

return c;

返回存储杨辉三角的二维数组。

四、总结

这段代码通过动态内存分配创建二维数组,结合杨辉三角的特性(首尾为 1,中间元素为上两行之和),逐行填充数据,最终生成指定行数的杨辉三角,并通过输出参数返回结果的结构信息(行数和每行元素数)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/98907.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/98907.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/98907.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue3 的单文件组件(.vue 文件)中,在 <script>、<template>、<style> 标签外输入内容不会导致程序报错

在 <script>、<template>、<style> 标签外首行误输入内容 vtsvts <script setup lang"ts" name"BaseDocxPreviewDialog"> /*** docx文件预览模态框组件*/ defineOptions({ name: "BaseDocxPreviewDialog" }); import { …

LVS负载均衡群集和LVS+Keepalived群集

1、群集 1.1群集的含义 由多台主机构成&#xff0c;但对外只表现为一个整体&#xff0c;只提供一个访问入口&#xff08;域名与IP地址&#xff09;&#xff0c;相当于一台大型计算机。 1.2 企业群集分类 负载均衡群集&#xff1a;提高应用系统的响应能力、尽可能处理更多的…

LeetCode力扣-hot100系列(5)

这一篇主要讲一讲回溯&#xff0c;除了N皇后问题是困难题&#xff0c;不过N皇后知道了咋做也不难。回溯整体上还是好做的&#xff0c;直到套路容易做出来&#xff0c;题目容易理解。回溯[1]全排列问&#xff1a;给定一个不含重复数字的数组 nums &#xff0c;返回其 所有可能的…

机器学习05——多分类学习与类别不平衡(一对一、一对其余、多对多)

上一章&#xff1a;机器学习04——决策树 下一章&#xff1a;机器学习06——支持向量机 机器学习实战项目&#xff1a;【从 0 到 1 落地】机器学习实操项目目录&#xff1a;覆盖入门到进阶&#xff0c;大学生就业 / 竞赛必备 文章目录一、多分类学习&#xff08;一&#xff09;…

2025.9.11总结

阅读《拿铁因素》有感昨天看完《拿铁因素》&#xff0c;这本书让我明白&#xff0c;如果不去主动去管理自己的财务&#xff0c;解决自己从前的财务问题&#xff0c;我很难过上自己想要的生活。今天就所读的内容&#xff0c;探究如何将这本书的内容运用到自己的一个日常生活中。…

Android,Jetpack Compose,坦克大战游戏案例Demo

代码如下&#xff08;这只是个简单案例而已&#xff09;&#xff1a; package com.example.myapplicationimport android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.compose.foundation.Canvas impo…

zookeeper是啥

ZooKeeper是一个开源的分布式协调服务&#xff0c;主要用于解决分布式系统中的数据一致性、状态同步和协作问题‌。它通过提供高可用、强一致性的服务&#xff0c;成为分布式系统的“指挥中心”‌。以下是其核心功能和应用场景&#xff1a;核心功能 分布式同步‌ 通过原子广播协…

【开题答辩全过程】以 基于Android的智慧旅游APP开发为例,包含答辩的问题和答案

个人简介一名14年经验的资深毕设内行人&#xff0c;语言擅长Java、php、微信小程序、Python、Golang、安卓Android等开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。感谢大家的…

如何选择?SEO 与 GEO 的 5 个核心分野

在 30 秒内&#xff0c;以下是您需要了解的有关 SEO 和 GEO 之间差异的信息&#xff1a; SEO&#xff08;搜索引擎优化&#xff09;&#xff1a;让您的网站出现在 Google 搜索中。目标&#xff1a;吸引用户点击您的链接。GEO&#xff08;生成引擎优化&#xff09;&#xff1a;…

基于MATLAB的光学CCD全息成像仿真程序实现

基于MATLAB的光学CCD全息成像仿真程序实现一、流程 #mermaid-svg-g3dkhZSC3Go4a2kH {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-g3dkhZSC3Go4a2kH .error-icon{fill:#552222;}#mermaid-svg-g3dkhZSC3Go4a2kH .er…

Java大厂面试实录:产业互联网大数据与AI服务场景下的微服务与智能搜索(含详细解读)

Java大厂面试实录&#xff1a;产业互联网大数据与AI服务场景下的微服务与智能搜索&#xff08;含详细解读&#xff09; 场景开场 &#x1f3ed;&#x1f984; 午后阳光正好&#xff0c;王老登背着“Java一把梭”的背包&#xff0c;精神抖擞地走进了产业互联网大数据与AI服务大厂…

Win_Server远程桌面(RDP)服务调用GPU并提上传输帧率和USB设备重定向

说明&#xff1a;Windows远程桌面服务&#xff08; RDP &#xff09;&#xff0c;RDP服务是可以无显卡运行的&#xff0c;显示远程桌面的时候并不调用显卡&#xff0c;可以做一些基本的管理操作&#xff0c;为提升RDP的性能&#xff0c;可以开启显卡加速&#xff08; OpenGL&am…

Docker(⑤Kali Linux-HexStrike AI安装)

卸载 WSL 里的 Ubuntuwsl --unregister Ubuntu查看当前已安装的发行版wsl --list --verbose下载kali-linuxwsl --install -d kali-linuxKali 服务端安装sudo apt update && sudo apt upgrade -y sudo apt install python3 python3-venv python3-pip git -y克隆源码 &am…

查找算法和递推算法

查找算法题目 1&#xff1a;找班级里的 “小明星”题目描述&#xff1a;班级有 10 个同学的编号&#xff08;1 - 10&#xff09;&#xff0c;输入一个编号&#xff0c;判断是否是 “小明星”&#xff08;假设编号为 5 的是小明星&#xff09;&#xff0c;是就输出 “找到小明星…

2025 年PT展前瞻:人工智能+如何走进普通人的生活?

导读&#xff1a;2025年&#xff0c;人工智能正在加速融入日常生活&#xff0c;提升着每一个普通人的幸福感与获得感。清晨&#xff0c;智能手环在你最浅的睡眠阶段轻柔震动&#xff0c;用最科学的方式将你唤醒&#xff1b;通勤路上&#xff0c;智能网联汽车早已规划好躲避拥堵…

1-机器学习与大模型开发数学教程-第0章 预备知识-0-1 集合与逻辑基础(集合运算、命题逻辑、量词)

在正式进入机器学习与大模型的数学核心之前&#xff0c;我们需要先打好“语言”和“逻辑”的基础。 这一章会从 集合与逻辑 入手&#xff0c;它们就像是编程中的语法规则&#xff1a; 集合告诉我们“对象属于不属于某个范围”&#xff1b;逻辑告诉我们“命题对不对、能不能推出…

字节 Trae vs 腾讯 CodeBuddy vs 阿里 Qoder:三大 AI-IDE 集成 OneCode 深度对比与体验测评

一、对比背景&#xff1a;AI-IDE 与低代码融合的行业必然性 在低代码开发进入 “AI 赋能期” 的 2025 年&#xff0c;AI 驱动的集成开发环境&#xff08;AI-IDE&#xff09;已成为低代码平台效率提升的核心载体。全球 AI-IDE 市场规模突破 50 亿美元&#xff0c;年增长率超 70…

DeerFlow 与 MCP 区别深度解析

目录 引言 一、DeerFlow 与 MCP 的详细概念说明 1. DeerFlow&#xff1a;面向研究自动化的多智能体应用框架 2. MCP&#xff1a;连接 AI 模型与外部系统的标准化通信协议 二、核心定位&#xff1a;应用框架与通信协议的本质 1. 角色不同 2. 技术架构 三、功能特性&…

视觉对象类型

矩形类型 对于最基本的视觉效果,Qt Quick 提供了一种绘制矩形的类型。这些矩形可以用颜色或垂直渐变着色。该类型还可以在矩形上绘制边框。 若要绘制矩形以外的自定义形状,请参阅类型或使用该类型显示预渲染图像。 import QtQuickItem {width: 320h

排序---选择排序(Selection Sort)

一、选择排序的基本概念 选择排序&#xff08;Selection Sort&#xff09;是一种简单直观的排序算法&#xff0c;其核心思想是每次从待排序元素中找到最值&#xff08;最小值或最大值&#xff09;&#xff0c;将其放到已排序序列的末尾&#xff0c;重复此过程直到所有元素完成排…