【Java·数组】:如何打印出杨辉三角?

193 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第24天,点击查看活动详情

1️⃣前言

大家好,我是翼同学。今天笔记的内容是:

  • 二维数组应用

2️⃣内容

利用二维数组打印杨辉三角

前面讲过,Java可以很方便的构造一个“不规则”的数组。

那什么是不规则数组?简单来说就是二维数组的每一个子数组的长度是不同的。

为了很好的理解这个概念,我们来看一个经典的示例:杨辉三角

首先,什么是杨辉三角?

  • 杨辉三角,就是二项式系数在三角形中的一种几何排列,在中国南宋数学家杨辉于1261年所著的《详解九章算法》一书中出现。

image.png

杨辉三角的特点有很多,比如:

  • n行数据就有n项元素,每行数字从1开始并且也终止于1,其左右对称
  • 每个数字的值等于它上方两数之和
  • (a+b)n(a+b)^n的展开式中的各项系数依次对应杨辉三角中第(n+1)(n+1)行中的每一项
  • n行的m个数可表示为从n-1个不同元素中取m-1个元素的组合数
  • ...

解题思路如下:

首先,我们创建并初始化一个二维数组,注意,这里指的是动态创建数组。

int[][] result = new int[7][];  // 7行数据即可

接着是子数组的元素个数的设置,也就是每n行都有n个元素。并给每一行的首元素和末元素都赋值为1。

for(int i = 0; i<result.length; i++){
    result[i] = new int[i+1];
    result[i][0] = 1;
    result[i][i] = 1;
}

然后根据杨辉三角的本质之一:每个数字都等于其上一行的左右两个数字之和赋值数组元素,这才是这道作业的关键。

for(int i = 0; i<result.length; i++){
    for(int j = 1; j < result[].length-1; j++){
        result[i][j] = result[i-1][j-1] + result[i-1][j];
    }
}

最后遍历数组并打印出来即可。

完整代码如下:

int[][] result = new int[7][];

for(int i = 0; i<result.length; i++) {
    result[i] = new int[i+1];
    result[i][0] = 1;
    result[i][i] = 1;
    for(int j = 1; j < result[i].length-1; j++){
        result[i][j] = result[i-1][j-1] + result[i-1][j];
    }
}

for(int[] arr : result) {
    for(int i : arr) {
        System.out.print(i + " ");
    }
    System.out.println();
}

3️⃣写在最后

好了,今天的笔记就记到这里。