首先杨辉三角的构成如下
通过分析能得出如下两个规律
1.第n行有n个元素,并且每一行的首尾元素都是1
1.中间的元素等于上面相邻的元素之和,用二维数组表示就是arr[i][j] = arr[i-1][j] + arr[i-1][j-1]
接下来就是实现动态开辟二维数组以此表示杨辉三角形
int level = myscanner.nextInt();
//给level(控制层数)开辟空间
int arr[][] = new int[level][];
注意:这里的二维数组与杨辉三角形的关系是,外层数组控制三角形行数,内层控制每行的元素,所以通过level可以实现输出任意层数的杨辉三角形。
这里在分析两层循环的作用:
//杨辉三角算法
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;
} else {
arr[i][j] = arr[i - 1][j] + arr[i - 1][j - 1];
}
}
}
上面已经给外层行数开辟了动态空间,在遍历第一层循环的时候,再给每一行元素开辟空间,这里空间的大小通过规律: 第n行有n个元素,可知每行有(i+1)个元素因为i循环是从=0开始所以+1
arr[i] = new int[i + 1]; //给每一行数组开辟空间
然后就进入第二层循环主要控制每行元素的输出,由规律:每一行的首尾元素都是1,可知通过if语句,可以判断遍历的元素是否在第一个和最后一个位置。
if (j== 0 || j == arr[i].length - 1) {
arr[i][j] = 1;
}
执行完if语句后通过else可以输出中间元素的值,而通过规律:中间的元素等于上面相邻的元素之和,可以用二维数组表示如下:
else {
arr[i][j] = arr[i - 1][j] + arr[i - 1][j - 1];
}
综上就是杨辉三角形的几大要点,总的代码如下:
import java.util.Scanner;
public class yanghui {
public static void main(String[] args){
Scanner myscanner = new Scanner(System.in);
System.out.println("请输入杨辉三角的层数");
int level = myscanner.nextInt();
//给level(控制层数)开辟空间
int arr[][] = new int[level][];
//杨辉三角算法
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;
} else {
arr[i][j] = arr[i - 1][j] + arr[i - 1][j - 1];
}
}
}
//利用循环输出二维数组
for(int i=0;i<arr.length;i++){
for(int j=0;j<arr[i].length;j++) {
System.out.print(arr[i][j]+"\t");
}
System.out.println(); //每遍历一层输出到下一行
}
}
}
然后运行效果如图: