问题描述
给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中,每个数是它左上方和右上方的数的和。 示例 1: 输入: numRows = 5 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]] 示例 2: 输入: numRows = 1 输出: [[1]] 提示: 1 <= numRows <= 30
阅读题目,通过 List<List<Integer>> 存储杨辉三角,numRows 为生成杨辉三角的行数
然后我们需要知道杨辉三角的规律:
- 每一行第一个数字为 1
- 每一行最后一个数字为 1
- 每一行的数字个数等于行数
- 针对存储在数组中的杨辉三角 array[m][n]: array[i][j] = array[i - 1][j - 1] + array[i - 1][j] . (i > 2)
然后我们就可以根据杨辉三角的规律和已知的条件来进行代码的编写.
代码
List<List<Integer>> lists = new ArrayList<>();
if (numRows == 0) {
return lists;
}
for (int i = 0; i < numRows; i++) {
List<Integer> mid = new ArrayList<>();
for (int j = 0; j <= i; j++) {
if (j == 0 || j == i) {
mid.add(1);
} else {
mid.add(lists.get(i - 1).get(j - 1) + lists.get(i - 1).get(j));
}
}
lists.add(mid);
}
return lists;
执行结果