思路:
本题其实很容易看出来,首尾都是1,然后第2个元素就是上一行的第一个元素和第二个元素之和。依次类推。可以得出结论:dp[i][j]=dp[i-1][j-1]+dp[i-1][j],当然要去掉首尾元素。代码如下:
public static List<List<Integer>> generate(int numRows) {List<List<Integer>> dp = new ArrayList<>(); // 初始化列表存储杨辉三角if (numRows == 0) return dp; // 边界情况,如果没有行,返回空列表// 第一行始终是 [1]dp.add(new ArrayList<>());dp.get(0).add(1);// 从第二行开始构建杨辉三角for (int i = 1; i < numRows; i++) {List<Integer> row = new ArrayList<>();List<Integer> prevRow = dp.get(i - 1); // 获取上一行row.add(1); // 每行的第一个元素始终是1// 计算中间的元素,每个元素是上一行的两个相邻元素之和for (int j = 1; j < i; j++) {row.add(prevRow.get(j - 1) + prevRow.get(j));}row.add(1); // 每行的最后一个元素也始终是1dp.add(row); // 将当前行添加到列表中}return dp; // 返回整个杨辉三角}