本题出自力扣题库第118题。题面大意如下:
给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。
杨辉三角中的数字有以下规律:
- 第n行的数字个数为n
- 对每一行来说,第一个和最后一个数字为1
- 从第三行开始,除了第一个和最后一个数字之外,其它的数字都等于它的左上方和右上方的两个数字之和,也就是说,第n行的第k个数字等于第n-1行的第k-1个数字和第k个数字的和。
杨辉三角前9行如下:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
从以上规则不难看出这是一个简单的DP应用。我们只需使用第n-1行的列表就可以得到第n行的列表, Java代码如下:
class Solution {
public List<List<Integer>> generate(int numRows) {
List<List<Integer>> result = new ArrayList<>();
List<Integer> row = new ArrayList<>();
row.add(1);
result.add(row);
for (int r = 1; r <numRows; r ++) {
List<Integer> prevRow = result.get(r - 1);
row = new ArrayList<>();
row.add(1);
for (int n = 1; n < r; n ++) {
row.add(prevRow.get(n - 1) + prevRow.get(n));
}
row.add(1);
result.add(row);
}
return result;
}
}