【LeetCode】第118题——杨辉三角(难度:简单)
题目描述
给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。
在杨辉三角中,每个数是它左上方和右上方的数的和。
- 示例: 输入: 5 输出:
解题思路
采用双循环,外层循环负责第i层,内层循环负责第i层的第j个元素。
除了第0行外,前后都是1,因此可以把前后的1提出放在外循环中。
代码详解
class Solution {
public List<List<Integer>> generate(int numRows) {
ArrayList<List<Integer>> list1 = new ArrayList<>();
// 如果numRows为0,则不参与循环直接返回空的list1,也正确
// 外循环
for(int i = 0; i < numRows; ++i) {
ArrayList<Integer> list2 = new ArrayList<>(); // 注意这里一定要新建,.clear()有问题
list2.add(1); // 前面的1
for(int j = 0; j < i-1; ++j) {
if (list1.get(i-1).size() >= 2) {
// 需要上一层的元素大于等于两个才能进行相加
list2.add(list1.get(i-1).get(j) + list1.get(i-1).get(j+1));
}
}
if(i >= 1) {
// 除第0行外,都有后面的1
list2.add(1);
}
list1.add(list2);
}
return list1;
}
}
注意点
- 第一次做的时候在循环外new了list2对象,然后用clear()进行所谓的“清空”,实则会连带外层的list1。
- 不要怕双循环会超时。想了半天不用双循环的方法,想不出来去看题解,发现题解也是双循环,好气哟。
