题目描述:
给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。
在杨辉三角中,每个数是它左上方和右上方的数的和。
示例:
输入: 5
输出:
[1],
[1,1],
[1,2,1],
[1,3,3,1],
[1,4,6,4,1]
思路:
我们知道杨辉三角的一行,则可以通过相邻值计算出下面的一行,而且我们知道每一行的第一个元素和最后一个元素都是1,此外我们处理3个特殊的numRows
输入,分别是0,1,2。可以采用List
集合来存储每一行的数据,再把每一行的数据存入另一个List
集合。
代码实现:
class Solution {
public List> generate(int numRows) {
List> triangle = new ArrayList<>();
if (numRows == 0){
return triangle;
}
triangle.add(new ArrayList<>());
triangle.get(0).add(1);
if (numRows == 1){
return triangle;
}
triangle.add(new ArrayList<>());
triangle.get(1).add(1);
triangle.get(1).add(1);
if (numRows == 2){
return triangle;
}
if (numRows > 2){
for (int rowNum = 2; rowNum < numRows ; rowNum++) {
List row = new ArrayList<>();
//每一行的前第一个元素都是1
row.add(1);
List prevRow = triangle.get(rowNum-1);
//利用前一行集合计算当前行除第一个和最后元素的集合
for (int i = 1; i < rowNum; i++) {
row.add(i,prevRow.get(i-1) + prevRow.get(i));
}
//每一个行的最后一个元素都是1
row.add(rowNum,1);
triangle.add(row);
}
}
return triangle;
}
}