> 文章列表 > 两种方法实现杨辉三角(java实现)

两种方法实现杨辉三角(java实现)

两种方法实现杨辉三角(java实现)

🎉🎉🎉点进来你就是我的人了
博主主页:🙈🙈🙈戳一戳,欢迎大佬指点!

人生格言:当你的才华撑不起你的野心的时候,你就应该静下心来学习!

欢迎志同道合的朋友一起加油喔🦾🦾🦾
目标梦想:进大厂,立志成为一个牛掰的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 中添加数字 1one.add(1);// 将第一行添加到 arrayList 中arrayList.add(one);// 从第二行开始,遍历 numRowsfor (int i = 1; i < numRows; i++) {// 定义一个列表用于存储当前行List<Integer> cur = new ArrayList<>();// 当前行的第一个元素是 1cur.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);}// 当前行的最后一个元素是 1cur.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(); // 换行}}
}