import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param num int整型
     * @return int整型二维数组
     */
    public int[][] generate (int num) {
        // 每个数是左上方和右上方的数之和
        int[][] result = new int[num][];
        for (int i = 0; i < num; i++) {
            int[] array = new int[i + 1];
            // 数字为1的时候存储1个1
            if (i == 0) array[i] = 1;
            // 数字为2的时候存储2个1
            if (i == 1) {
                array[0] = 1;
                array[i] = 1;
            }
            // 数字大于2的需要两数相加
            if (i > 1) {
                // 规律,每一个数组第一个为1
                array[0] = 1;
                // i+1 是为了锁定是下一行的三角,-2是为了去掉开头和结尾计算
                for (int j = 1; j <= (i + 1 - 2); j++) {
                    // 获取前一个数组的第一个值
                    int prevLeft = result[i - 1][j - 1];
                    // 获取前一个数组的后一个值
                    int prevRight = result[i - 1][j];
                    // 两值相加求和
                    array[j] = prevLeft + prevRight;
                }
                // 规律,每一个数组第一个为1
                array[i] = 1;
            }
            result[i] = array;
        }
        return result;
    }
}

杨辉三角,解释说是自己的左上和自己的右上方的合,

看以上图找规律:

1.传入数字1和数字2,那么都为1,

2.每一个数组里第一个位置数字为1,最后一个数字为1,这样每一排就处理中间的数字即可,怎么算中间的呢,假如此时是3,那么你就用3-2=1,这时代表考虑1个数字的计算就行,位置索引就是第一个,假如4,就用4-2=2,考虑两个数字就行,而这两个数字遍历循环即可,从1开始到2结束将前一个值数字相加

3.自己的左上方和右上方,需要从已加入到数组里的数据取出上一个数据进行循环,并相加存储到当前位置合下