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

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

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

欢迎志同道合的朋友一起加油喔
目标梦想:进大厂,立志成为一个牛掰的Java程序猿,虽然现在还是一个嘿嘿
谢谢你这么帅气美丽还给我点赞!比个心


目录

目录

打印杨辉三角形

方法一:顺序表实现 (ArrayList)

 方法二:暴力求解(双重for循环)



打印杨辉三角形

科普:杨辉三角形是中国古代数学的杰出研究成果之一,是我国北宋数学家贾宪于 1050 年首先发现并使用的。而后南宋数学家杨辉在《详解九章算法》一书中记载并保存了“贾宪三角形“。因此,贾宪三角形又被称为杨辉三角形。

简单地说,杨辉三角形的构成如下面动图所示:
两种方法实现杨辉三角(java实现)_第1张图片

从上面的动图我们可以得出一个道公式:每一行的第一个元素和最后一个元素都是1,杨辉三角形第i行j列的值 = 第 (i-1) 行 (j-1) 列的值 + 第 (i-1) 行 (j) 列的值。

编写代码,让程序实现如下:
两种方法实现杨辉三角(java实现)_第2张图片

方法一:顺序表实现 (ArrayList)

 通过杨辉三角图,我们可以知道杨辉三角对应的每一行会存有各自相应的数字。

随着行数的增加,每一行中的项数也在增加。

那么我们何不把该杨辉三角图看成是一个二维数组,每一行都存了一个list链表。

两种方法实现杨辉三角(java实现)_第3张图片

 代码实现如下:

class Solution {
    // 定义一个生成杨辉三角的方法,参数为行数
    public List> generate(int numRows) {
        // 定义一个二维列表用于存储杨辉三角的每一行
        List> arrayList = new ArrayList<>();
        // 定义一个列表用于存储第一行,即 [1]
        List one = new ArrayList<>();
        // 向列表 one 中添加数字 1
        one.add(1);
        // 将第一行添加到 arrayList 中
        arrayList.add(one);
        // 从第二行开始,遍历 numRows
        for (int i = 1; i < numRows; i++) {
            // 定义一个列表用于存储当前行
            List cur = new ArrayList<>();
            // 当前行的第一个元素是 1
            cur.add(1);
            // 获取上一行的数据
            List 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(); // 换行
        }
    }
}

你可能感兴趣的:(java,算法,数据结构)