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



京公网安备 11010502036488号