实验环境:JDK8
实验工具:IDEA2021
实现思路:
准备用一个二维数组装载杨辉三角,默认给里面所有值先添0,由数学规律易得n行的杨辉三角有2 * n - 1列,先确定好每一行边界 1 的位置并且赋值,然后在两个1区间之间进行规律赋值,由此得出了一个大致的杨辉三角二维数组但却远远不够,我们必须得打印一个对称的杨辉三角。
那我们该怎么办呢?给所有的位置都给予相同的位置数不就好了吗,首先判断出当前杨辉三角的最大值的位数,比如最大值是126,此时位数为3位,打印的时候若遇见了0,就添加3个空格,若遇见两位数则输出该两位数再添加一个空格。
主函数:
public static void main(String[] args) {
//行数1-1 2-3 3-5
/* 杨辉三角:
1
* 1 1
* 1 2 1
* 1 3 3 1
* */
int n = 23;
// 初始化n行的杨辉三角
int[][] arr = getInit(n);
// 通过杨辉三角层数判断最大数的位数,为提前开辟新空间做准备
int count = getNumDigitsByAll(arr, n);
// 打印杨辉三角
printTriangle(arr, n, count);
}
结果如下:
初始化getInit函数:
public static int[][] getInit(int n) {
//列数
int m = 2 * n - 1;
int arr[][] = new int[n][m