原题出处:https://leetcode.cn/leetbook/read/top-interview-questions-easy/xncfnv/
解法一:
class Solution {
public List<List<Integer>> generate(int numRows) {
List<List<Integer>> result = new ArrayList<>();
ArrayList<Integer> row = new ArrayList<>();
for (int i = 0 ; i < numRows; i++) {
// 这里每次都会将第一个元素设置为1,然后其他元素依次推后
row.add(0,1);
// 这里再次遍历每一行的元素
for (int j = 1; j < row.size()-1; j++) {
// row.get(j)表示的是第一个需要加的元素,row(j+1)表示第二个需要加的元素
row.set(j,row.get(j)+row.get(j+1));
}
result.add(new ArrayList(row));
}
return result;
}
}
思路:
这里就是row.get(j)+row.get(j+1)需要好好理解一下,就没什么大问题了。
2024-08-02 start:
row.add(0,1)这行代码
第一次遍历的时候是1
第二次遍历的时候是1、1
第三次遍历的时候是1、1、1
因为第一个元素和最后一个元素都是1,所以循环不处理第一个元素和最后一个元素
for (int j = 1; j < row.size()-1; j++) { 这里的循环表示第一次遍历和第二次遍历都没有执行,第三次遍历的时候赋值的就是中间的那个元素,它的值就是上次遍历的那两个元素的和
所以第三次遍历的时候它的值就是1、2、1
第四次执行row.add(0,1)它的值是1、1、2、1
然后第一次循环它的值是1、3、2、1
第二次循环它的值是1、3、3、1
第五次执行row.add(0,1)它的值是1、1、3、3、1
第一次循环的时候它的值是1、4、3、3、1
第二次循环的时候它的值是1、4、6、3、1
第三次循环的时候它的值是1、4、6、4、1
end