问题描述
给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。
在「杨辉三角」中,每个数是它左上方和右上方的数的和。
示例1:
示例2:
问题分析
观察杨辉三角,可以轻松地看出来最外层两侧的都为1
如果看成一个二维数组的话,当j = 0或i = j,dp[i][j] = 1
剩余位置的规律为左上方和右上方的数的和
如果看成一个二维数组的话,为dp[i][j] = dp[i - 1][j - 1] + dp[i - 1][j];
由此可得
状态转移方程:dp[i][j] = dp[i - 1][j - 1] + dp[i - 1][j];
初始化:当j = 0或i = j时,dp[i][j] = 1
利用for循环和if判断将这个二维数组填充完,然后返回即可
代码
class Solution {
public List<List<Integer>> generate(int numRows) {
List<List<Integer>> list = new ArrayList<>();
int[][] dp = new int[numRows][numRows];
for(int i = 0;i < numRows;i++){
List<Integer> l = new ArrayList<>();
for(int j = 0;j <= i;j++){
if(j == 0 || i == j){
dp[i][j] = 1;
} else{
dp[i][j] = dp[i - 1][j - 1] + dp[i - 1][j];
}
l.add(dp[i][j]);
}
list.add(l);
}
return list;
}
}
收获
1.java中list集合的初始化:List<泛型> list = new ArrayList<>();
2.list再包list的初始化:List<List<泛型>> list = new ArrayList<>();