力扣118杨辉三角:代码实现+注释详解+其它思考

news2024/12/27 10:43:37

文章目录

  • 第一部分:题目
  • 第二部分:代码
  • 第三部分:题解
    • 3.1 generate()方法解析
    • 3.2 main方法调用
  • 第四部分:思考

第一部分:题目

🏠 链接:118. 杨辉三角 - 力扣(LeetCode)

⭐ 难度:简单

第二部分:代码

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;

public class PascalTriangle {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int numRows = scanner.nextInt();
        List<List<Integer>> lists = generate(numRows);
        System.out.println(lists);
        scanner.close();
    }
    public static List<List<Integer>> generate(int numRows) {
        List<List<Integer>> lists = new ArrayList<>();
        for (int i =0;i<numRows;i++){
            Integer[] array = new Integer[i + 1];
            array[0]=1;
            array[i]=1;
            for (int j = 1;j<=i/2;j++){
                array[j]=lists.get(i-1).get(j)+lists.get(i-1).get(j-1);
                array[i-j] = array[j];
            }
            lists.add(Arrays.asList(array));
        }
        return lists;
    }
}

第三部分:题解

3.1 generate()方法解析

public static List<List<Integer>> generate(int numRows) {
    List<List<Integer>> lists = new ArrayList<>();//设置List<Integer>类型的List接口子类对象存储杨辉三角
    for (int i =0;i<numRows;i++){//对杨辉三角的第(i+1)层进行存储
        Integer[] array = new Integer[i + 1];//建立一个length=i+1的数组保存该层杨辉三角值
        array[0]=1;//该层第一个元素值设置为1
        array[i]=1;//该层最后一个元素值设置为1
        for (int j = 1;j<=i/2;j++){
            //从第2个元素开始设置索引在[1,i-1]的元素,但由于每一层的对称性,所以只需要遍历一半(i/2)即可
            array[j]=lists.get(i-1).get(j)+lists.get(i-1).get(j-1);//得到上一层的list并取到对应索引赋值
            array[i-j] = array[j];//由对称性进行赋值,对称的两个索引的和为i
        }
        lists.add(Arrays.asList(array));//将该层的元素值由array->list形式存储到lists集合
    }
    return lists;//返回杨辉三角
}

3.2 main方法调用

public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);//创建一个扫描器
    int numRows = scanner.nextInt();//键盘输入得到numRows
    List<List<Integer>> lists = generate(numRows);//得到杨辉三角
    System.out.println(lists);//隐式调用重写的toString方法显示杨辉三角
    scanner.close();//关闭扫描器,释放资源
}

第四部分:思考

Integer[] array = new Integer[i + 1];
array[0]=1;
array[i]=1;
for (int j = 1;j<=i/2;j++){
    array[j]=lists.get(i-1).get(j)+lists.get(i-1).get(j-1);
    array[i-j] = array[j];
}
lists.add(Arrays.asList(array));

对于generate()方法的这一部分,最初的写法是如下

for (int i =0;i<numRows;i++){
    List<Integer> list = new ArrayList<>();
    list.set(0,1);//该处抛出异常
    list.set(i,1);
    for (int j = 1;j<=i/2;j++){
        list.set(j,lists.get(i-1).get(j)+lists.get(i-1).get(j-1));
        list.set(i-j,list.get(j));
    }
    lists.add(list);
}

即是每层直接创建ArrayList对象,将元素值通过set(Index,Element element)方法设置,但测试发现在刚开始的第三行就抛出了IndexOutOfBoundsException,于是进行debug发现

也就是说,set方法调用的前提条件是该索引位置已经设置过了元素值,否则是无法设置的,会抛出异常

你可能有疑惑为什么不用add方法代替set方法,是因为我用了对称的方法减少遍历次数,如果用add会很麻烦,你可以试试。当然,这种对称的方法效率可能比起全部遍历不会高,因为存在需要将array->list的过程,还是会把该层的全部元素遍历。

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

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

相关文章

在Matlab中开发AutoSAR模型的流程(自下而上)

目录 前面 创建模型&#xff0c;环境配置 AutoSAR配置 SWC与Runable Interface Port 前面 前面介绍了AutoSAR软件组件开发的两种方式&#xff0c;其中自下向上的方式&#xff0c;是从模型出发&#xff0c;流程如下。 创建模型&#xff0c;环境配置 1、新建模型&#x…

前端技巧总结---持续更新

易遗漏事件总结 关闭/保存后 重置 一些变量、表单 考虑业务流程 加载数据提示 移动端技巧总结 阿里图库 在原有的基础上加新图标 该代码替换掉原有的 iconfont.css ❗src 请求头要加https&#xff0c;要不然移动端会不显示阿里图标 onBackPress 返回上一级 onBackPr…

【Unity VR开发】结合VRTK4.0:不可移动区域

语录&#xff1a; 生活坏到一定程度就会好起来&#xff0c;因为它无法更坏。努力过后&#xff0c;才知道许多事情坚持坚持&#xff0c;就过来了。 前言&#xff1a; 有时候我们可能并不需要所有的区域都进行移动&#xff0c;而只需要部分区域进行移动&#xff0c;那么我们就要将…

中核武汉 x Tapdata:能源领域老牌央企如何释放数据力量,推进精细化管理

数据孤岛是一直以来的老大难问题&#xff0c;之前也有在寻找相关产品和解决方案&#xff0c;要么太重&#xff0c;要么不容易落地&#xff0c;直到偶然间看到 Tapdata。这是一个小而美的产品&#xff0c;专注实时数据开发领域&#xff0c;其异构数据实时同步能力使我们可以更专…

陶泓达:4.17午间提前布局美盘黄金原油操作建议!

黄金方面&#xff1a; 上周五(4月14日)&#xff0c;美市盘中&#xff0c;黄金金价大幅下跌&#xff0c;盘中一度下跌55美元。随着黄金遭遇技术性抛售压力&#xff0c;回吐一周的大部分涨幅&#xff0c;不过&#xff0c;在周末之前&#xff0c;许多分析师表示&#xff0c;市场早…

MySQL索引及SQL优化

先对索引做个大概回顾,然后我们详细探讨SQL优化 索引 索引的分类 主键索引 设定为主键后数据库会自动建立索引&#xff0c;innodb为聚簇索引 单值索引 即一个索引只包含单个列&#xff0c;一个表可以有多个单列索引【建议不要超过3】 唯一索引 索引列的值必须唯一&#xff0…

算法训练第五十九天 | 503.下一个更大元素II 、42. 接雨水

单调栈part02503.下一个更大元素II题目描述思路42. 接雨水题目描述思路暴力解法双指针优化单调栈解法准备工作单调栈处理逻辑503.下一个更大元素II 题目链接&#xff1a;503.下一个更大元素II 参考&#xff1a;https://programmercarl.com/0503.%E4%B8%8B%E4%B8%80%E4%B8%AA%E…

升级长江存储最新闪存,忆恒创源发布新一代企业级NVMe SSD

2023年4月11日 —— 北京忆恒创源科技股份有限公司&#xff08;Memblaze&#xff09;正式发布搭载高品质国产闪存的PBlaze6 6541 系列企业级PCIe 4.0 NVMe SSD。作为 MUFP 平台化开发的最新作品&#xff0c;PBlaze6 6541 采用长江存储最新一代晶栈 Xtacking 3D NAND&#xff0c…

类中的那点事

c入门必看类类的基本介绍类的实例化类的6个默认成员函数构造函数析构函数拷贝构造函数赋值重载静态成员友元类 类的基本介绍 class为定义类的关键字&#xff0c;ClassName为类的名字&#xff0c;{}中为类的主体&#xff0c;注意类定义结束时后面分号不能省略。类体中内容称为类…

恢复删除的文件,小白也能轻松掌握的5个方法!

案例&#xff1a;如何恢复删除的文件&#xff1f; 【各位大神&#xff01;谁能帮帮我呀&#xff01;一不小心把电脑里很重要的文件删除了&#xff0c;不知道该如何是好&#xff0c;求一个简单方法&#xff0c;感谢大家&#xff01;】 在计算机使用过程中&#xff0c;误删文件…

Tomcat处理请求的全过程

文章目录一、组件详解二、请求处理流程1.总体流程图2.Worker线程任务流程三、源码跟踪1.Tomcat启动线程组件2.Acceptor3.Poller4.Worker总结一、组件详解 在Tomcat处理客户端请求的过程中&#xff0c;这里面有三个组件概念&#xff0c;他们都是线程&#xff0c;分别负责不同的…

NEWS|关于人工智能大型语言模型能否理解的争论

科学家调查了当前人工智能&#xff08;AI&#xff09;研究界的一场激烈的争论&#xff0c;即大型预先训练的语言模型是否可以说可以理解语言——以及任何类人意义上的语言编码的物理和社会情境。他们提供了支持和反对这种理解的论点&#xff0c;以及根据这些论点而出现的更广泛…

7个最新的时间序列分析库介绍和代码示例

时间序列分析包括检查随着时间推移收集的数据点&#xff0c;目的是确定可以为未来预测提供信息的模式和趋势。我们已经介绍过很多个时间序列分析库了&#xff0c;但是随着时间推移&#xff0c;新的库和更新也在不断的出现&#xff0c;所以本文将分享8个目前比较常用的&#xff…

SpringCloud学习(六)——Feign的简单使用

文章目录1. Feign 的使用1.1 引入依赖1.2 添加注解1.3 编写Feign客户端1.4 测试2. Feign中的自定义配置2.1.配置文件方式2.2.Java代码方式3. Feign 性能优化4. Feign的抽取式使用4.1 抽取配置4.2 引入依赖4.3 指明Client在此之前&#xff0c;我们服务之间需要进行调用的时候使用…

Spring Cloud Alibaba全家桶(十)——微服务网关Gateway组件

前言 本文小新为大家带来 微服务网关Gateway组件 相关知识&#xff0c;具体内容包括微服务网关Gateway组件&#xff08;包括&#xff1a;Gateway核心概念&#xff0c;Gateway工作原理&#xff09;&#xff0c;Spring Cloud Gateway环境搭建&#xff0c;路由断言工厂&#xff08…

颜值即正义,献礼就业季,打造多颜色多字体双飞翼布局技术简历模版(Resume)

一年好景君须记&#xff0c;最是橙黄橘绿时。金三银四&#xff0c;秣马厉兵&#xff0c;没有一个好看的简历模板怎么行&#xff1f;无论是网上随便下载还是花钱买&#xff0c;都是一律千篇的老式模版&#xff0c;平平无奇&#xff0c;味同嚼蜡&#xff0c;没错&#xff0c;蜡都…

一文理解Transformer整套流程

【备注】部分图片引至他人博客&#xff0c;详情关注参考链接 【PS】query 、 key & value 的概念其实来源于推荐系统。基本原理是&#xff1a;给定一个 query&#xff0c;计算query 与 key 的相关性&#xff0c;然后根据query 与 key 的相关性去找到最合适的 value。举个例…

mysql语法大全

首先来一个全局总览&#xff0c;后面我会分别对每个命令进行说明&#xff1a; 如果你的mysql导入环境变量&#xff0c;可以在命令行输入&#xff1a; mysql -u root -p然后输入密码登录数据库 否则&#xff0c;打开mysql command line并输入密码进入数据库 一&#xff0c;基础…

HTTP HTTPS简介

一篇文章带你走进HTTP HTTPS场景复现核心干货HTTP/HTTPS简介&#xff08;简单比较&#xff09;HTTP工作原理HTTPS作用场景复现 最近在对前端的深入学习过程中&#xff0c;接触到了与网络请求相关的内容&#xff0c;于是打算出一个专栏&#xff0c;从HTTP与HTTPS入手&#xff0…

针对航空安全风险分析和飞行技术评估问题的题解

文章目录针对航空安全风险分析和飞行技术评估问题的题解思路文章最下方针对航空安全风险分析和飞行技术评估问题的题解 最新进度在文章最下方卡片&#xff0c;加入获取思路数据代码论文&#xff1a;2023十三届MathorCup交流 (第一时间在CSDN分享&#xff0c;文章底部) 思路 问…