1. 题目
(1) 题解
把这个三角形往左边拉直就会发现,除了两边的都是1以外,其他每个格子的值都是他正上面格子和左上角格子的和。
class Solution {
public List<List<Integer>> generate(int numRows) {
List<List<Integer>> res = new ArrayList<>(); //结果值
ArrayList<Integer> row = new ArrayList<>(); //每一行的元素
for (int i = 0; i < numRows; i++) {
//下面一行都会比上面一行多一个元素,我们在第一个位置给他加个1
row.add(0, 1);
//遍历每一行的结果,遍历的时候跳过第一个和最后一个,
//每个格子的值都是他正上面和左上角元素的和,
//当前的row中存储的是上一行的值,每一行在上一行的基础上进行更新
for (int j = 1; j < row.size() - 1; j++) {
row.set(j, row.get(j) + row.get(j + 1));
//有人可能会问,为什么是正上和正上右:j 和 j+1(这不是正上和正上右么?)
//这是因为最开始row.add(0, 1); 导致原来的位置都往后挪了一个
}
res.add(new ArrayList<>(row)); //一行一行加进去 所以需要 new ArrayList<>(row)
}
return res;
}
}
- row.set(j, row.get(j) + row.get(j + 1));
有人可能会问,为什么正上和正上左 是 j 和 j+1(这不是正上和正上右么?)
这是因为最开始row.add(0, 1); 导致原来的位置都往后挪了一个
2. 杨辉三角2
(1) 题解
注意是到rowIndex 行:
class Solution {
public List<Integer> getRow(int rowIndex) {
ArrayList<Integer> row = new ArrayList<>(); //每一行的元素
for (int i = 0; i <= rowIndex; i++) {
//下面一行都会比上面一行多一个元素,我们在第一个位置给他加个1
row.add(0, 1);
//遍历每一行的结果,遍历的时候跳过第一个和最后一个,
//每个格子的值都是他正上面和左上角元素的和,
//当前的row中存储的是上一行的值,每一行在上一行的基础上进行更新
for (int j = 1; j < row.size() - 1; j++) {
row.set(j, row.get(j) + row.get(j + 1));
//有人可能会问,为什么是正上和正上右:j 和 j+1(这不是正上和正上右么?)
//这是因为最开始row.add(0, 1); 导致原来的位置都往后挪了一个
}
}
return row;
}
}