题目介绍
力扣118题:leetcode-cn.com/problems/pa…
动态规划
用一个二维数组dp[numRows][numRows]保存每一次动态规划的结果
- 1.令
dp[0][0]=1(第一列) - 2.根据以下表格找到规律
得到如下规律(以下情况均为列数大于1)
if(col==0){
dp[row][col]=1
} else {
dp[row][col]=dp[row-1][col-1]+dp[row-1][col]
}
代码如下:
class Solution {
public List<List<Integer>> generate(int numRows) {
List<List<Integer>> result = new ArrayList<List<Integer>>();
int[][] dp = new int[numRows][numRows];
dp[0][0] = 1;
for (int i = 1; i < numRows; i++) {
for (int j = 0; j <= i; j++) {
if(j == 0) {
//第一列和最后一列的值都是1
dp[i][j] = 1;
}else {
dp[i][j] = dp[i-1][j-1] + dp[i-1][j];
}
}
}
//将二维数组转为List<List<Integer>>类型
for (int i = 0; i < dp.length; i++) {
List<Integer> tmp = new ArrayList<>();
for (int j = 0; j < dp.length; j++) {
if(dp[i][j] == 0) {
//走到本行的末尾了
break;
}
tmp.add(dp[i][j]);
}
result.add(new ArrayList<>(tmp));
}
return result;
}
}