OJ练习LeetCode-118:杨辉三角

题目 

118. 杨辉三角 - 力扣(LeetCode)

 

 可以看到,默认的代码块中出现List<List<Integer>>为二级ArrayList,类似于数组中的二维数组。List<元素类型>

在List<List<Integer>>中,元素类型为List<Integer>;

在List<Integer>中,元素类型为Integer。

即每一行为一个线性表,线性表中的元素为Integer类型,最终的杨辉三角也是一个线性表,元素类型为每一行的线性表。

思路 

 接下来,我们分析一下题目:

1.在杨辉三角中,第一行只有一个元素,为数字1;

2.第二行只有两个元素,均为1;

3.第三行有三个元素,为1,2,1(中间的数字2为上一行的两个1相加得到);

4.第四行有四个元素,为1,3,3,1(从第三行开始,需要运算得到的数为当前行数的下标-1,即内层循环为j < i); 

.......

 假设我们有i行,j列,那么每一行的第一个元素和最后一个元素均为1,且第i行的第j个元素就等于i-1行的第j个元素和第j-1个元素之和。

即array[ i ][ j ] = array[ i - 1 ][ j ] + array[ i - 1 ][ j - 1 ]

完整代码

class Solution {
    public List<List<Integer>> generate(int numRows) {
        //根据题目已知,numRows为行数
        if(numRows == 1){
            //构建一个新的线性表用来存放最终的结果
            List<List<Integer>> ans = new ArrayList<>();
            //构建一个新的线性表用来存放每一行的元素
            List<Integer> row = new ArrayList<>();
            //将元素1放入第一行中
            row.add(1);
            //将第一行放入最终的线性表中
            ans.add(row);

            return ans;
        }
        if(numRows == 2){
            //有两行时,先把第一行的线性表加入,再将第二行的线性表加入
            List<List<Integer>> ans = new ArrayList<>();
            List<Integer> row = new ArrayList<>();
            row.add(1);     
            ans.add(row);   //第一行的线性表加入到最终的线性表中

            row = new ArrayList<>();
            row.add(1);
            row.add(1);
            ans.add(row);   //第二行的线性表加入到最终的线性表中

            return ans;
        }
        //从第三行开始,中间的元素需要经过运算得出
        List<List<Integer>> ans = new ArrayList<>();
        List<Integer> row = new ArrayList<>();
        row.add(1);     
        ans.add(row);   //第一行的线性表加入到最终的线性表中

        row = new ArrayList<>();
        row.add(1);
        row.add(1);
        ans.add(row);   //第二行的线性表加入到最终的线性表中
        //第三行开始下标为2
        for(int i = 2;i < numRows;i++){
            row = new ArrayList<>();
            row.add(1);
            List<Integer> lastRow = ans.get(i-1);    //得到上一行的元素
            for(int j = 1;j < i;j++){
                int a = lastRow.get(j);
                int b = lastRow.get(j - 1);
                row.add(a + b);
            }
            row.add(1); //将最后一个元素1放在整行最后
            ans.add(row);   //将这一行线性表加入到最终结果中    
        } 
        return ans;
    }
}

代码优化

class Solution {
    public List<List<Integer>> generate(int numRows) {
        List<List<Integer>> ans = new ArrayList<>();
        List<Integer> row = new ArrayList<>();
        row.add(1);
        ans.add(row);
        if(numRows == 1){
            return ans;
        }
        
        row = new ArrayList<>();
        row.add(1);
        row.add(1);
        ans.add(row);
        if(numRows == 2){
            return ans;
        }

        //从第三行开始(下标为2)
        for (int i = 2; i < numRows; i++) {
            row = new ArrayList<>();
            row.add(1);       //添加每一行第一个元素为1
            List<Integer> lastrow = ans.get(i-1);   //得到上一行的元素
            //从每一行第二个元素开始(下标为1)
            //从第三行开始,需要运算得到的数为当前行数的下标-1
            for (int j = 1; j < i; j++) {
                int a = lastrow.get(j);
                int b = lastrow.get(j -1);
                row.add(a + b);
            }
            row.add(1);
            ans.add(row);
        }
        return ans;
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

百度天工AIoT设备应用使能平台助力企业低成本开发

数字中国建设的顶层文件《数字中国建设整体布局规划》&#xff08;以下简称《规划》&#xff09;于近日印发&#xff0c;作为数字中国建设的重要基础&#xff0c;《规划》指出&#xff0c;要全面赋能经济社会发展&#xff0c;推动数字技术和实体经济的深度融合&#xff0c;产业…

如何将本地项目上传到Github的方法步骤

默认&#xff1a;已经安装好了git。 第一步&#xff1a;我们需要先创建一个本地的版本库&#xff08;其实也就是一个文件夹&#xff09;。 你可以直接右击新建文件夹&#xff0c;也可以右击打开Git bash命令行窗口通过命令来创建。 第二步&#xff1a;通过命令git init把这个…

chatGPT所在地区不支持怎么解决-需要下载ChatGPT吗

ChatGPT国内能下载吗 ChatGPT是基于云端的人工智能交互服务&#xff0c;无需下载即可使用。因此&#xff0c;您不需要在国内下载ChatGPT&#xff0c;只需要在网络环境联通的情况下&#xff0c;通过浏览器访问ChatGPT官网或合作伙伴提供的ChatGPT服务即可使用。当然&#xff0c…

怎么评价2023年第十三届MathorCup高校数学建模挑战赛?

文章目录赛题思路选题建议1 竞赛信息2 竞赛时间3 组织机构4 建模常见问题类型4.1 分类问题4.2 优化问题4.3 预测问题4.4 评价问题赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; 选题建议 首先要注意&#xff0c;A、B题为研究生组可选题目&#xff0c;A…

【分享购】“消费+分享”的新型聚合生态模式

“分享购”是一个以创新的商业模式整合流量与资源&#xff0c;实现整个生态布局的应用。结合了CPS资源、商城、礼包、异业联盟/O2等应用&#xff0c;可实现“消费分享”的新型聚合生态模式。 分享购模式所采用的五五复制的会员裂变制度是这个模式的核心亮点。 用户通过平台用户…

【Python学习笔记】4. Python大数据编程入门

4. Python大数据编程入门4.1 Python操作MySQL4.2 Spark与PySpark4.2.1 PySpark基础4.2.2 数据输入4.2.2.1 Python数据容器转换为RDD对象4.2.2.2 读取文本文件得到RDD对象4.2.3 数据计算4.2.3.1 map算子4.2.3.2 flatMap算子4.2.3.3 reduceByKey算子4.2.3.4 案例&#xff1a;单词…

亚马逊云科技云创计划,打造创新创业生态系统

在充满着不确定性的2022年&#xff0c;电子消费市场一片哀鸿遍野&#xff0c;智能家居行业却如同逆水行舟&#xff0c;显示出稳健的发展之势&#xff0c;宣告着智能家居时代已来。在2023年3月24日举办的“智能家居&#xff0c;出海闭门会”上&#xff0c;为进一步发挥产业带潜力…

zabbix自动发现和自动注册部署

目录 zabbix自动发现 确保客户端上的zabbix-agent2服务状态正常 在web页面删除原有的客户端主机 在服务端和客户端上配置 hosts 解析 在 Web 页面配置自动发现 zabbix自动注册 环境准备 修改 zabbix-agent2 配置文件 在 Web 页面配置自动注册 zabbix自动发现 对于agen…

Python 进阶指南(编程轻松进阶):七、编程术语

原文&#xff1a;http://inventwithpython.com/beyond/chapter7.html 在 XKCD 漫画《飞人五号》&#xff08;xkcd.com/1133&#xff09;中&#xff0c;网络漫画的艺术家兰道尔门罗只用了 1000 个最常见的英语单词&#xff0c;就创作出了土星五号火箭的技术示意图。这部漫画把所…

python学习之合并多张图片转成mp4视频代码实现

文章目录前言一、需要调入的模块1、imageio模块2、Image 模块二、实现合并多张图片转成 mp4 视频三、优化改进一下总结前言 随着现代科技飞速发展和人们提升视觉上体验&#xff0c;利用图片生成视频的方法&#xff0c;确实为工作或者提升生活体验感做了很多成功案例&#xff1…

vue实现好看的相册、图片网站

目录 一、效果图 1.项目访问地址 2.画虫官方效果图&#xff1a; 3.作者实现的效果图&#xff1a; 二、代码实现 1.项目结构截图 2.路由配置代码&#xff1a; 3. 头部底部主页面内容显示容器的代码 4.首页&#xff0c;即标签页的代码 三、项目启动说明 四、总结 一、…

Talk预告 | 浙江大学特聘研究员廖依伊:面向自动驾驶仿真平台的神经渲染

本期为TechBeat人工智能社区第477期线上Talk&#xff01; 北京时间3月1日(周三)20:00&#xff0c;浙江大学信电学院特聘研究员——廖依伊的Talk将准时在TechBeat人工智能社区开播&#xff01; 她与大家分享的主题是: “面向自动驾驶仿真平台的神经渲染”&#xff0c;届时将探…

Vue.js 2.0 实例

构造器 每个 Vue.js 应用都是通过构造函数 Vue 创建一个 Vue 的根实例 启动的&#xff1a; var vm new Vue({// 选项 }) 虽然没有完全遵循 MVVM 模式&#xff0c; Vue 的设计无疑受到了它的启发。因此在文档中经常会使用 vm 这个变量名表示 Vue 实例。 在实例化 Vue 时&…

爱智EdgerOS之深入解析在爱智应用中如何使用Socket.IO轻松实现双向通信

一、什么是 Socket.IO&#xff1f; Socket.IO 是一个基于事件通信的实时应用程序框架&#xff0c;它在即时通讯、通知和消息推送&#xff0c;实时分析等场景中有广泛的应用。Socket.IO 包括两个部分&#xff1a; 在 Server 端的模块&#xff08;JSRE 已提供了 socket.io 模块&…

密码和生物识别技术可以阻止不良行为者

网络安全漏洞是一个持续的威胁&#xff0c;而且只会越来越严重。2021 年&#xff0c;45% 的美国公司遭受了与凭证泄露相关的数据泄露&#xff0c;4200 万人因身份盗用和相关欺诈遭受了超过 500 亿美元的总价值损失&#xff0c;并且在过去五年中&#xff0c;超过5 亿个凭证和密码…

AI绘画王炸功能Control Net安装教程

原文&#xff1a;AI绘画王炸功能Control Net安装教程 - 知乎 AI绘画&#xff0c;最近两大王炸功能出圈了。 一个就是超真实超细节的美女图片&#xff0c;已经快和照片无异了&#xff0c;甚至有人用AI绘画的“女仆照片”开始招募游艇会了&#xff0c;具体教程可以查看Lora这篇…

多元时间序列 | GRU门控循环单元多变量时间序列预测(Matlab完整程序)

多元时间序列 | GRU门控循环单元多变量时间序列预测(Matlab完整程序) 目录 多元时间序列 | GRU门控循环单元多变量时间序列预测(Matlab完整程序)预测结果评价指标基本介绍程序设计参考资料预测结果 评价指标 训练集数据的R2为:0.98197 测试集数据的R2为:0.97913 训练集数…

Nacos配置管理

Nacos配置管理1 Nacos配置管理1.1 统一配置管理1.1.1 在nacos中添加配置文件1.1.2 从微服务拉取配置1.2 配置热更新1.2.1 方式一1.2.2 方式二1.3 配置共享1&#xff09;添加一个环境共享配置2&#xff09;在user-service中读取共享配置3&#xff09;运行两个UserApplication&am…

Minikube安装、运行

1.Minikube是什么 本地的k8s集群&#xff0c;方便开发者学习k8s。 2.安装的前提条件 2个CPU货以上。2G内存或以上。20G磁盘或以上。可以链接互联网。安装docker&#xff08;官网说或者一个虚拟环境&#xff0c;这个不考虑&#xff09;。 3.官网地址 minikube start | minik…