目录
题目链接:https://leetcode.cn/problems/pascals-triangle/description/
题目描述:给定一个非负整数
numRows
,生成「杨辉三角」的前numRows
行。
在「杨辉三角」中,每个数是它左上方和右上方的数的和。
示例一:
输入: numRows = 5
输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]
示例二:
输入: numRows = 1
输出: [[1]]
1、 在原题目中,一开始给出如下代码:
- class Solution {
- public List
> generate(int numRows) {
-
- }
-
- }
可知,让补写的方法的返回类型为 List>
,我们再看到它的时候,可以想到二维数组是如何存放元素的。我们类比于二维数组,List>的理解可为外层List集合类容器里面的每一个元素仍是List类。
2、根据返回类型,我们首先可以创建出外层:
- List
> ret = new ArrayList<>();
- //里面的每一个元素都为ArrayList类型
ret里面的每一个元素就是杨辉三角的其中一行,对于杨辉三角的每一行,我们也用ArrayList类来实现,每一行都创建一个ArrayList顺序表。
如图:
杨辉三角的第一行只有一个元素1,所以第一行我们这样实现:
- List
row1 = new ArrayList<>(); - row1.add(1);
- ret.add(row1); //将杨辉三角的第一行加入ret
对于第二行至第numRows
行,它们的第一个元素和最后一个元素都是1,而中间元素可以由上一行的两个元素相加,所以如下实现:
- for (int i = 1;i < numRows;i++) {
- List
curRow = new ArrayList<>(); - curRow.add(1);
- List
prvRow = ret.get(i-1); - for (int j = 1;j
- curRow.add(prvRow.get(j)+ prvRow.get(j-1));
- }
- curRow.add(1);
- ret.add(curRow);
- }
三、代码
完整代码如下:
- class Solution {
- public List
> generate(int numRows) {
- List
> ret = new ArrayList<>();
- //第一行
- List
row1 = new ArrayList<>(); - row1.add(1);
- ret.add(row1);
- for (int i = 1;i < numRows;i++) {
- List
curRow = new ArrayList<>(); - curRow.add(1);
- List
prvRow = ret.get(i-1); - for (int j = 1;j
- curRow.add(prvRow.get(j)+ prvRow.get(j-1));
- }
- curRow.add(1);
- ret.add(curRow);
- }
- return ret;
- }
-
- }
四、总结
本文的杨辉三角的解法有多种,像二维数组,在本文我们使用了ArrayList集合类,主要是想通过此题来练习Java集合类的使用。希望此文能帮到你们,感谢阅读!
-
相关阅读:
kubernetesr进阶--污点和容忍之概述
小程序的破局之道,数字化营销已然成为趋势
嵌入式系统开发笔记103:解决DEV C++程序运行中文乱码问题
商标复审成功率是多少?
Java语言基础第三天
黑马React18: 基础Part 1
Debezium系列之:记录mariadb数据库删除多张临时表debezium解析到的消息以及解决方法
2023最新electron 进程间通讯的几种方法
Windows驱动开发(一)
XTTS系列之三:中转空间的选择和优化
-
原文地址:https://blog.csdn.net/m0_61876562/article/details/133844669