题目
打印出杨辉三角形(要求打印出10行)
思路
- 找规律,除了第一和第二行,其余每行都是开头结尾是1
- 且数字等于上一行左右两边的和
- 为了格式好看,用二维数组,默认全是0,遇到有数字就赋值,没数字的保持0,打印的时候输出空格
- 如果空格输出是两个 数字printf时应该用2d 如果是三个 则3d
代码实现:
private static void yanghuiTriangle(int row1) {
if (row1 == 1) {
System.out.println(1);
}else {
int[][] arr1 = new int[row1][2*row1+1];//动态创建默认全是0 0的就不用赋值了
for (int j = 0; j < arr1.length; j++) {//行数
for (int j2 = 0; j2 < arr1[0].length; j2++) {//列数
if (j == 0) {//如果是第一行
arr1[j][row1]= 1;
}else if (j == 1) {
arr1[j][row1]= 2;
arr1[j][row1-2] = 1;
arr1[j][row1+2] = 1;
}else {
if (j2 == row1-1-j || j2 == 2*row1 -(row1-1-j)) {
arr1[j][j2]= 1;//首尾的1先赋值
}
if (j2 >row1-1-j && j2 < 2*row1 -(row1-1-j)) {
arr1[j][j2]=arr1[j-1][j2-1]+arr1[j-1][j2+1];
}//在首尾之间的数遵循规律
}
}
}
for (int j = 0; j < arr1.length; j++) {
for (int j2 = 0; j2 < arr1[j].length; j2++) {
if (arr1[j][j2] == 0) {//为0 就是没赋值 输出空格
System.out.print(" ");
}else {
System.out.printf("%3d",arr1[j][j2]);//输出值
}
}
System.out.println();
}
}
}