在「杨辉三角」中,每个数是它左上方和右上方的数的和。
设计思路根据上一次的杨辉数组推算出下一层
1
0+1 1+0
不难知道1被加了两次,并且从第二层开始左右两边始终为1
设计主要循环有以下几点:
第一次不会进入推算循环,直接赋值1
第二层开始最后一个元素不进行计算,因为推算逻辑是【下标】+【下标+1】防止越界
达到除第一层外,首个元素和末尾元素都赋值为1,也就是说实际推算输入元素是该层元素-2
代码:
//-------------------------------------「杨辉三角」
//在「杨辉三角」中,每个数是它左上方和右上方的数的和。
public List<List<Integer>> generate(int numRows) {
List<List<Integer>> list =new ArrayList<>();
/*
观察题目可以知道改题返回类型为 List<List<Integer>>
那么我们需要建立一个循环每次把List<Integer>插入进去
并且这个List<Integer>是每次需要修改的杨辉三角的层 顺序表
*/
//这个用列记录上一层的杨辉三角数组
List<Integer> l1 =new ArrayList<>();
//循环的建立
for (int i = 0; i < numRows; i++) {
//定义插入的的顺序表
List<Integer> l2 =new ArrayList<>();
//循环中执行次数是数组长度
for (int j = 0; j < l1.size(); j++) {
//根据杨辉三角的规律 第一个为1 只要是第一个就插入1
if(j==0){
l2.add(1);
}
//不是末尾元素进行杨辉三角变换
if (j<l1.size()-1) {
//根据上一层进行推算
l2.add(l1.get(j)+l1.get(j+1));
}
}
//为了防止越界错误,我们把最后一个数放在循环后面更加高效
l2.add(1);
//对于这一层的数组存入l1方便下一层的推算
l1=l2;
//将l2存入List中
list.add(l2);
}
return list;
}
}