首页 > 技术文章 > 使用二维数组打印一个 10 行杨辉三角

the-world-of-guangchen 2020-07-13 09:44 原文

/*
 * 使用二维数组打印一个 10 行杨辉三角。
【提示】
 1. 第一行有 1 个元素, 第 n 行有 n 个元素
 2. 每一行的第一个元素和最后一个元素都是 1
 3. 从第三行开始, 对于非第一个元素和最后一个元素的元素。即:
    yanghui[i][j] = yanghui[i-1][j-1] + yanghui[i-1][j];
 *
 */

 

思路:1.声明并初始化数组
   2.给数组元素赋值
    2.1 new 出内层元素的空间大小(这里经常忘记)
    2.2 给首末元素赋值
    2.3 给非首末元素赋值
   3.遍历输出

 


public class YangHuiTest {
    public static void main(String[] args) {
        //1.声明并初始化数组
        int[][] yangHui = new int[10][];
        
        //2.给数组元素赋值
//        yangHui[0] = new int[1];
//        yangHui[1] = new int[2];
//        ......一般情况是这样为内层元素赋值,
//        用外层   new出内层一维数组的空间大小,这里太多行,用循环
        for(int i = 0;i < yangHui.length;i++) {
            yangHui[i] = new int [i+1];
            //2.1先给首末元素赋值
            yangHui[i][0] = 1;
            yangHui[i][i] = 1;//可以合在一起写
            
            //2.2给非首末元素赋值
            //j=0(第一列)已经被赋过值1,所以从j=1开始(第二列)
            //如果单单写 < yangHui[i].length,包括末尾元素也会被赋值,但末元素已经赋过,所以-1
            for(int j = 1;j < yangHui[i].length - 1;j++) {
                yangHui[i][j] = yangHui[i-1][j] + yangHui[i-1][j-1];
            }
        }
            
        //3.遍历输出
        for(int i = 0;i < yangHui.length;i++) {
            for(int j = 0;j < yangHui[i].length;j++) {
                System.out.print(yangHui[i][j]+" ");
            }
            System.out.println();
        }
    }
}

还有一个点就是在 j 的循环条件那里,到底应该填什么

1.画图理解,同时你要知道 i 和 j 表示的分别是  行 和 列  的下标,都是从 0 开始的(下同)

2.文字说明:由于 j = 0 已经赋过值,后面从 j = 1开始,如果到 yangHui[i].length,你会发现这就是跟遍历一样了,每个元素都拜访了一遍(包括最后一个元素),很明显跟我们想要的结果不一致,我们这一步只希望给非首末元素赋值,所以还要 -1

 

推荐阅读