Leetcode118.杨辉三角
题目描述
/**
*
* 给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。
* <p>
* 在「杨辉三角」中,每个数是它左上方和右上方的数的和。
*/
思路分析
- 杨辉三角,即每一层的第一个数字和最后一个数字都为1,其他数字为上一层两数字之和
- 基于上述规律,使用两层循环生成杨辉三角每一层的数字
- 外层循环控制生成每一层数字,内层循环用于生成每一层具体的数字
- 使用集合保存每一层的关系,具体生成方法见源码
- 源码见下
源码及分析
/**
*
* @param numRows 指定行数
* @return 返回生成的杨辉三角
*/
public List<List<Integer>> generate(int numRows) {
//定义保存集合的集合用于存储杨辉三角
List<List<Integer>> res = new ArrayList<>();
//外层循环控制总共生成多少层
for (int i = 0; i < numRows; i++) {
//使用集合保存每层的数字
ArrayList<Integer> level = new ArrayList<>();
//内层循环生成每层的数字
for (int j = 0; j <= i; j++) {
if (j == 0 || j == i) {
level.add(1);
} else {
//当前层当前数字等于上一层两数字之和
level.add(res.get(i - 1).get(j - 1) + res.get(i - 1).get(j));
}
}
res.add(level);
}
return res;
}