当前位置 博文首页 > Liu,:Leetcode——杨辉三角(找规律)
把这个三角形往左边拉直就会发现,除了两边的都是1以外,其他每个格子的值都是他正上面格子和左上角格子的和。
public static 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中
res.add(new ArrayList<>(row)); //一行一行加进去 所以需要 new ArrayList<>(row)
}
return res;
}