Leetcode119. 杨辉三角 II
题目描述
/**
* 给定一个非负索引 rowIndex,返回「杨辉三角」的第 rowIndex 行。
*
* 在「杨辉三角」中,每个数是它左上方和右上方的数的和。
*/
思路分析
- 首先搞明白杨辉三角的构成,及第一层有一个数字,第二层有2个数字,第n层有n个数字
- 每一层的第一个和最后一个数字都是1,其他位置的数字为上一层对应两数字之和
- 因此可以使用集合模拟杨辉三角的构造,使用双层循环即可实现
- 考虑优化
- 因为题目要求只返回最后一层的元素,因此不宜构造整个大的集合,当前层元素的构成只依赖与上一层
- 因此只需要保存上一层即可,可减少空间复杂度
- 源码见下
源码及分析
/**
*
* @param rowIndex 杨辉三角行数
* @return 最后一行元素
*/
public List<Integer> getRow(int rowIndex) {
//使用集合保存整个杨辉三角
List<List<Integer>> res = new ArrayList<>();
//外层循环控制杨辉三角的生成
for (int i = 0; i <= rowIndex; i++) {
//定义集合保存每一层的数字
ArrayList<Integer> level = new ArrayList<>();
//内层循环用于向每一层添加数字
for (int j = 0; j <= i; j++) {
//每一层的第一个和最后一个总为1
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.get(rowIndex);
}