前言
何为杨辉三角?
- 每个数等于它上方两数之和。
- 每位数字左右对称,由1开始逐渐变大。
- 第n行有n项。
实现过程:以5行5列的等腰三角为例推导
1.创建多个不同长度的二位数组
1.1 五行五列的直角三角形,需要注意数组的下标比行数小1。
1.2 每一行的个数逐渐加一,即二位数组的低维下标依次加一,往每行分配空间。yh[i]表示高维数组。yh[0]=new int[1];往第一行分配1个存储空间,依次继续则第四行分配5个存储空间。
示意图:
//0
//00
//000
//0000
//00000
int rows=5;
int[][] yh=new int[rows][];
for(int i=0;i<rows;i++){
//创建多个不同长度的二位数组
yh[i]=new int[i+1];
}
2.完成初始值赋值
2.1 循环每一行,小于高维数组的长度即可,从第一行开始到第五行。
2.2 为每一行前尾都赋值1,可观察到第几行就有第几个数值。例如:第四行的第一位数表示为yh[3][0]=1,最后位数为yh[3][3]=1。则循环行数就能完成赋值。
示意图:
//1
//11
//101
//1001
//10001
for(int i=0;i<yh.length;i++){
//完成赋值
yh[i][0]=1;
yh[i][i]=1;
}
3.计算
3.1 循环遍历二维数组,i表示行数,j表示列数,高维数组的长度为yh.length,低维数组的长度为yh[i].length。但是若内层循环使用yh[i].length,会使数组下标越界,例如当循环到第三行i=2时,会循环三次101,到尾部的1时会将第二行的第二位数与第二行第三位数相加,但是并没有第二行第三位数字。再观察第四行计算两次就行,所以内部循环的条件从1开始的话小于i则可,第五行时从第二列开始内部循环到第四列就行。
3.2 步骤2中的所有为0的数值,需要进行计算。以第三行第二列的2计算为例,它的值为第二行第一列数值+第二行第二列的数值。yh[i][j]=yh[i-1][j]+yh[i-1][j-1]
3.3 行数从第三行开始此时i=2(其余位置的已被步骤2赋值为1),列数从第二列开始此时j=1。
示意图:
//1 //1
//11 //11
//101 //121
//1001 //1331
//10001 //14641
for(int i=