20200412
题目 :杨辉三角
给定一个非负整数numRows
,生成杨辉三角的前numRows
行。
在杨辉三角中,每个数是它左上角和右上角的数的和。
示例 :
输入: 5
输出:
[
[1],
[1,1],
[1,2,1],
[1,3,3,1],
[1,4,6,4,1]
]
思路 :(动态规划)当知道一行杨辉三角,就可以根据每对相邻的值轻松地算出它的下一行。
code
class Solution{
public List<List<Integer>> generate(int numRows){
List<List<Integer>> triangle = new ArrayList<>();
if(numRows == 0) return triangle;
//初始化第一行
triangle.add(new ArrayList<>());
triangle.get(0).add(1);
for(int rowNum=1;rowNum < numRows;rowNum++){
//新建一行
List<Integer> row = new ArrayList<>();
//取上一行
List<Integer> prevRow = triangle.get(rowNum-1);
row.add(1);
//除了本行的第一个和最后一个,都为一,其他都可以由前一行的相邻两个值求和得到下一行值
for(int j=1;j<rowNum;j++){
row.add(prevRow.get(j-1) + prevRow.get(j));
}
row.add(1);
triangle.add(row);
}
return triangle;
}
}