完整代码如下
java
class Solution {
public List<List<Integer>> generate(int numRows) {
//初始化一个结果数组
List<List<Integer>> result = new ArrayList<>();
if(numRows == 0){
return result;
}
List<Integer> firstRow = new ArrayList<>();
firstRow.add(1);
result.add(firstRow);
//从第二行开始
for(int i = 1;i<numRows;i++){
List<Integer> preNums = result.get(i-1);
List<Integer> currentNums = new ArrayList<>();
currentNums.add(1);
for(int j = 1;j<i;j++){
currentNums.add(preNums.get(j-1)+preNums.get(j));
}
currentNums.add(1);
result.add(currentNums);
}
return result;
}
}
解题思路:
如果输入的numRows为0的话,则直接返回结果数组,因为第0行没有元素,杨辉三角的第1行是固定不变的,所以可以直接进行添加,从第2行开始,杨辉三角的生成规律是首尾固定为1,中间的数依赖于上一层的数值进行两两相加计算得到的,所以我们可以在numRows的循环中获取上一层数值,来计算当前层的数值,当前层的计算方式:首元素固定添加为1,进入循环计算上一层两两相加的数值添加到当前层,最后一位元素添加为1,最后把处理好的当前层数据存入结果集合中返回