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