🎉🎉🎉点进来你就是我的人了
博主主页:🙈🙈🙈戳一戳,欢迎大佬指点!
人生格言:当你的才华撑不起你的野心的时候,你就应该静下心来学习!欢迎志同道合的朋友一起加油喔🦾🦾🦾
目标梦想:进大厂,立志成为一个牛掰的Java程序猿,虽然现在还是一个🐒嘿嘿
谢谢你这么帅气美丽还给我点赞!比个心
目录
目录
打印杨辉三角形
方法一:顺序表实现 (ArrayList)
方法二:暴力求解(双重for循环)
打印杨辉三角形
科普:杨辉三角形是中国古代数学的杰出研究成果之一,是我国北宋数学家贾宪于 1050 年首先发现并使用的。而后南宋数学家杨辉在《详解九章算法》一书中记载并保存了“贾宪三角形“。因此,贾宪三角形又被称为杨辉三角形。
简单地说,杨辉三角形的构成如下面动图所示:
从上面的动图我们可以得出一个道公式:每一行的第一个元素和最后一个元素都是1,杨辉三角形第i行j列的值 = 第 (i-1) 行 (j-1) 列的值 + 第 (i-1) 行 (j) 列的值。
编写代码,让程序实现如下:
方法一:顺序表实现 (ArrayList)
通过杨辉三角图,我们可以知道杨辉三角对应的每一行会存有各自相应的数字。
随着行数的增加,每一行中的项数也在增加。
那么我们何不把该杨辉三角图看成是一个二维数组,每一行都存了一个list链表。
代码实现如下:
class Solution {
// 定义一个生成杨辉三角的方法,参数为行数
public List<List<Integer>> generate(int numRows) {
// 定义一个二维列表用于存储杨辉三角的每一行
List<List <Integer>> arrayList = new ArrayList<>();
// 定义一个列表用于存储第一行,即 [1]
List<Integer> one = new ArrayList<>();
// 向列表 one 中添加数字 1
one.add(1);
// 将第一行添加到 arrayList 中
arrayList.add(one);
// 从第二行开始,遍历 numRows
for (int i = 1; i < numRows; i++) {
// 定义一个列表用于存储当前行
List<Integer> cur = new ArrayList<>();
// 当前行的第一个元素是 1
cur.add(1);
// 获取上一行的数据
List<Integer> pre = arrayList.get(i - 1);
// 从第二个元素开始,遍历上一行的数据
for (int j = 1; j < i; j++) {
// 当前行的第 j 个元素等于上一行的第 (j-1) 个元素与第 j 个元素之和
int ret = pre.get(j - 1) + pre.get(j);
// 将当前元素添加到当前行
cur.add(ret);
}
// 当前行的最后一个元素是 1
cur.add(1);
// 将当前行添加到 arrayList 中
arrayList.add(cur);
}
// 返回存储了整个杨辉三角的二维列表
return arrayList;
}
}
方法二:暴力求解(双重for循环)
public class Test3 {
// 主方法
public static void main(String[] args) {
// 创建一个 Scanner 对象用于接收用户输入
Scanner scanner = new Scanner(System.in);
// 从用户输入中获取杨辉三角的行数
int n = scanner.nextInt();
// 创建一个二维数组用于存储杨辉三角
int[][] arr = new int[n][];
// 杨辉三角算法
for (int i = 0; i < arr.length; i++) { // 外层遍历行数
arr[i] = new int[i + 1]; // 给每一行数组开辟空间
for (int j = 0; j < arr[i].length; j++) { // 内层遍历每一行的元素
if (j == 0 || j == arr[i].length - 1) { // 如果是每一行的第一个元素或最后一个元素
arr[i][j] = 1; // 将其赋值为 1
} else { // 其他情况
arr[i][j] = arr[i - 1][j] + arr[i - 1][j - 1]; // 当前元素的值为上一行同列元素和前一列元素之和
}
}
}
// 输出杨辉三角
for (int[] tmp : arr) { // 遍历每一行
for (int x : tmp) { // 遍历每一行的元素
System.out.print(x + " "); // 输出当前元素,后面添加一个空格
}
System.out.println(); // 换行
}
}
}