打卡力扣题目五

#左耳听风 ARST 打卡活动重启#

目录

 一、问题

 二、解题方法一

三、解题方法二

四、两种方法的区别


 关于 ARTS 的释义 —— 每周完成一个 ARTS:
● Algorithm: 每周至少做一个 LeetCode 的算法题
● Review: 阅读并点评至少一篇英文技术文章
● Tips: 学习至少一个技术技巧
● Share: 分享一篇有观点和思考的技术文章

希望通过此次活动能聚集一波热爱技术的人,延续好奇、探索、实践、分享的精神。
 


 一、问题

今天是杨辉三角的题目

给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。

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

示例 1:

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

示例 2:

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

 二、解题方法一

def generate(numRows):res = []for i in range(numRows):row = [1]if res:last_row = res[-1]row.extend([sum(pair) for pair in zip(last_row, last_row[1:])])row.append(1)res.append(row)return res

这段代码实现了一个名为 `generate` 的函数,用于生成杨辉三角的前 numRows 行。

首先,我们定义了一个空列表 `res`,用于存储每一行的结果。然后,使用一个 for 循环遍历每一行,对于第 i 行,我们先将第一个元素设为 1,表示该行的第一个数是 1。

接着,如果 `res` 不为空,则说明已经生成了前几行,我们可以从上一行中获取到当前行需要用到的数据。具体来说,我们使用 zip 函数将当前行和上一行进行配对,得到一个由元组组成的列表。每个元组包含两个相邻的元素,例如 [(1, 2), (2, 3), (3, 5)] 表示第三行的前两个数是 1、2,第三个数是 1+2=3、2+3=5。然后,我们使用列表推导式将这些元组中的元素两两相加,得到一个新的列表,其中包含了当前行的所有数。最后,我们将最后一个元素设为 1,表示当前行的最后一个数也是 1。

将当前行的结果添加到 `res` 中后,继续循环生成下一行。当所有行都生成完毕后,返回 `res` 作为结果。

需要注意的是,在 Python 中,列表是可变对象,因此在函数内部修改 `res` 不会影响到外部的变量。但是在函数内部直接修改 `res[-1]` 是不可取的,因为这样会改变列表的长度,导致后面的元素被覆盖。正确的做法是使用 `append` 方法向列表末尾添加新元素。

三、解题方法二

另一种解题方法是使用动态规划的思想,从底部开始逐层生成杨辉三角。具体来说,我们可以定义一个二维数组 `dp`,其中 dp[i][j] 表示第 i 行、第 j 列的元素值。然后,我们使用两个嵌套的循环遍历每一行和每一列,根据题目中的规则计算出每个元素的值,并将其保存到 `dp` 中。最后,将 `dp` 转置得到最终的结果。

这种方法的时间复杂度为 O(n^2),空间复杂度也为 O(n^2)。相比于直接生成所有元素的方法,这种方法更加高效。

class Solution:def generate(self, numRows):if numRows == 0:return []dp = [[1] * numRows for _ in range(numRows)]for i in range(2, numRows):for j in range(1, i):dp[i][j] = dp[i-1][j-1] + dp[i-1][j]return list(map(list, zip(*dp)))

这段代码定义了一个名为 Solution 的类,其中包含了一个名为 generate 的方法。这个方法接受一个非负整数 numRows 作为参数,返回杨辉三角的前 numRows 行。

在方法内部,我们首先判断 numRows 是否为 0,如果是则直接返回空列表。然后,我们定义一个二维数组 dp,用于存储每个元素的值。接下来,我们使用两个嵌套的循环遍历每一行和每一列,根据题目中的规则计算出每个元素的值,并将其保存到 dp 中。最后,我们使用 zip 函数将 dp 转置得到最终的结果,并将其转换为列表返回。

四、两种方法的区别

两种方法的主要区别在于实现思路和时间/空间复杂度。

第一种方法是直接生成所有元素的方法,它的核心思想是使用一个循环遍历每一行和每一列,根据题目中的规则计算出每个元素的值,并将其添加到结果列表中。这种方法的时间复杂度为 O(n^2),因为需要遍历所有的元素。同时,由于需要存储所有的元素,因此空间复杂度也为 O(n^2)。

第二种方法是使用动态规划的思想,从底部开始逐层生成杨辉三角。它的核心思想是使用一个二维数组 `dp` 来存储每个元素的值,然后使用两个嵌套的循环遍历每一行和每一列,根据题目中的规则计算出每个元素的值,并将其保存到 `dp` 中。最后,我们将 `dp` 转置得到最终的结果。这种方法的时间复杂度为 O(n^2),空间复杂度也为 O(n^2)。相比于第一种方法,这种方法更加高效,因为它只需要存储当前层的所有元素,而不需要存储整个三角形的所有元素。

 

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

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

相关文章

Jgit 工具类 (代码检出、删除分支(本地、远程)、新建分支、切换分支、代码提交)

https://blog.csdn.net/qq_37203082/article/details/120327084 Jgit 工具类 (代码检出、删除分支&#xff08;本地、远程&#xff09;、新建分支、切换分支、代码提交)_jgit删除远程分支_CJ点的博客-CSDN博客 <!--JAVA操作GIT--><dependency><groupId>org.…

JavaScript学习 -- SM3算法基本原理

SM3算法是一种由国家密码管理局发布的哈希算法&#xff0c;被广泛用于数字签名和消息认证等应用中。在JavaScript中&#xff0c;我们可以使用第三方库来计算数据的SM3哈希值。本篇文章将介绍SM3算法的基本原理和相关技术&#xff0c;并提供一些实例来演示如何在JavaScript中使用…

vue3 中模板字符串中添加click方法并传参

工作中遇到html字符串拼接出dom结构&#xff0c;并且需要触发事件和传参的场景。借此机会记录一下。 1. 拼接内容 核心是利用html的onClick属性&#xff0c;触发单击事件&#xff0c;想要传递对象&#xff0c;必须要JSON.stringify()&#xff0c;否则控制台会报错 // 传递对象…

DAY14_FilterListenerAjaxAxiosJsonfastjson综合案例-axios和html交互

目录 1 Filter1.1 Filter概述1.2 Filter快速入门1.2.1 开发步骤1.2.2 代码演示 1.3 Filter执行流程1.4 Filter拦截路径配置1.5 过滤器链1.5.1 概述1.5.2 代码演示1.5.3 问题 1.6 案例1.6.1 需求1.6.2 分析1.6.3 代码实现1.6.3.1 创建Filter1.6.3.2 编写逻辑代码1.6.3.3 测试并抛…

ERROR in unable to locate ‘***/public/**/*‘ glob

前提 自己搭了一个react项目的脚手架&#xff0c;npm包下载一切都很正常&#xff0c;启动的时候突然就报ERROR in unable to locate ***/public/**/* glob这个错误&#xff0c;根据百度分析了一下产生的原因&#xff1a;webpack配置文件中的CopyWebpackPlugin导致的 网上给出的…

【idea工具】idea工具,build的时候提示:程序包 com.xxx.xx不存在的错误

idea工具&#xff0c;build的时候提示:程序包 com.xxx.xx不存在的错误&#xff0c;如下图&#xff0c;折腾了好一会&#xff0c; 做了如下操作还是不行&#xff0c;idea工具编译的时候&#xff0c;还是提示 程序包不存在。 a. idea中&#xff0c;重新导入项目&#xff0c;也还…

Vue+axios如何解决跨域

1、为什么会产生跨域&#xff1f; 出于浏览器的同源策略限制。 同源策略&#xff08;Sameoriginpolicy&#xff09;是一种约定&#xff0c;是浏览器的一种安全机…

从源码角度去深入分析关于Spring的异常处理ExceptionHandler的实现原理

ExceptionHandler的作用 ExceptionHandler是Spring框架提供的一个注解&#xff0c;用于处理应用程序中的异常。当应用程序中发生异常时&#xff0c;ExceptionHandler将优先地拦截异常并处理它&#xff0c;然后将处理结果返回到前端。该注解可用于类级别和方法级别&#xff0c;…

苍穹外卖心得与总结【对比瑞吉】【如何获得铁粉】

对于苍穹外卖项目&#xff0c;从学习课程加复习已经13天了。 对于一名已经学习过SSMLinuxRedis数据库的Java练习生来说&#xff0c;这个项目相对于之前学习的《瑞吉外卖》新增了很多功能和技术&#xff0c;是很值得练手和提升的课程&#xff0c;下面给出自己的一些见解。&#…

django channels实战(websocket底层原理和案例)

1、websocket相关 1.1、轮询 1.2、长轮询 1.3、websocket 1.3.1、websocket原理 1.3.2、django框架 asgi.py在django项目同名app目录下 1.3.3、聊天室 django代码总结 小结 1.3.4、群聊&#xff08;一&#xff09; 前端代码 后端代码 1.3.5、群聊&#xff08;二&#xff09…

nginx配置项目,配置文件及相应linux命令

云服务器安装nginx步骤 安装nginx&#xff1a; yum install nginx 启动nginx&#xff1a; nginx 停止nginx&#xff1a; nginx -s stop 配置文件路径/etc/nginx/conf.d/ 上传配置文件到这个目录下&#xff0c;然后重启nginx 配置文件&#xff08;单云服务器配置单项目&…

uniapp兼容微信小程序和支付宝小程序遇到的坑

1、支付宝不支持v-show 改为v-if。 2、v-html App端和H5端支持 v-html &#xff0c;微信小程序会被转为 rich-text&#xff0c;其他端不支持 v-html。 解决方法&#xff1a;去插件市场找一个支持跨端的富文本组件。 3、导航栏处有背景色延伸至导航栏外 兼容微信小程序和支…

小研究 - JVM 垃圾回收方式性能研究(三)

本文从几种JVM垃圾回收方式及原理出发&#xff0c;研究了在 SPEC jbb2015基准测试中不同垃圾回收方式对于JVM 性能的影响&#xff0c;并通过最终测试数据对比&#xff0c;给出了不同应用场景下如何选择垃圾回收策略的方法。 目录 4 垃圾回收器性能比较 4.1 测试结果 5 结语 …

Ubuntu /dev/loop<0..n>挂载的目录的分析

执行命令df -h lkmaoubuntu:~$ df -h Filesystem Size Used Avail Use% Mounted on udev 1.6G 0 1.6G 0% /dev tmpfs 391M 2.1M 389M 1% /run /dev/sda1 59G 30G 26G 54% / tmpfs 2.0G 0 2.0G 0% /dev/s…

fpga开发--蜂鸣器发出连续不同的音调

描述 使用fpga蜂鸣器连续发出do&#xff0c;re&#xff0c;mi&#xff0c;fa&#xff0c;so&#xff0c;la&#xff0c;xi七个不同的音调&#xff0c;每个音调的持续时间为0.5s。 思路 采用状态机实现音调的转化&#xff0c;当do状态持续了0.5s之后转移到re状态&#xff0c;…

【Git】修改文件版本回退撤销修改删除文件

文章目录 修改文件版本回退git reset语法规则注意 撤销修改情况1&#xff1a;工作区的代码还未add情况2&#xff1a;工作区的代码已经add 但未commit情况3&#xff1a;工作区的代码已经add 并且已经 commit 删除文件 修改文件 Git⽐其他版本控制系统设计得优秀&#xff0c;Git…

【Solr】Solr搜索引擎使用

文章目录 一、什么是Solr?二 、数据库本身就支持搜索啊,干嘛还要搞个什么solr?三、如果我们想要使用solr那么首先我们得安装它 一、什么是Solr? 其实我们大多数人都使用过Solr,也许你不会相信我说的这句话,但是事实却是如此啊 ! 每当你想买自己喜欢的东东时,你可能会打开某…

chatgpt 接口使用(一)

使用api实现功能 参考链接&#xff1a;https://platform.openai.com/examples 安装库&#xff1a; pip3 install openai 例如&#xff1a; import os import openaiopenai.api_key os.getenv("OPENAI_API_KEY") response openai.ChatCompletion.create(model&q…

jenkins 配置git

在linux 中输入 保证git 安装成功 git --version使用查看git 安装目录&#xff08;非源码安装直接用yum 安装的&#xff09; which gitjenkins 中到 系统管理–>全局工具配置–> Git installations 新建一个项目 选择自由风格 源码管理选择 git 如果使用的是码云&a…

SpringBoot多环境开发-配置文件

在Spring Boot中进行多环境开发时&#xff0c;你可以使用配置文件来定义每个环境的属性。Spring Boot提供了一种方便的方式来管理和加载不同环境的配置文件。 以下是一些常见的配置文件命名约定&#xff1a; application.properties: 默认的配置文件&#xff0c;适用于所有环…