题目链接118. 杨辉三角 - 力扣(LeetCode)
首先观察题目,我们会发现一些规律:
1.每一行的个数等于这一行的行数(比如第一行就是1个数,第二行是2个数)
2.每一行的第一个和最后一个数都是1
3.每一行的第j个数等于上一行的第j个数和(j-1)个数之和
总结完规律后就可以结合前几天学的ArrayList开始做题了!
解题过程
首先定义一个存放所有行数的集合
List<List<Integer>> generate = new ArrayList<>();
可以先将第一行存放进去
List<Integer> row1 = new ArrayList<>();
row1.add(1);//第一行
generate.add(row1);
接着根据上面的分析的规律进行编写代码即可(每一行的第一个添加1,然后在第一个和最后一个中间根据循环来实现求数,最后一个再添加1,最后把这一行添加到generate集合中)
for (int i = 1;i<numRows;i++){
List<Integer> row = new ArrayList<>();
row.add(1);
for (int j = 1;j<=i-1;j++){
List<Integer> priRow = generate.get(i-1);
int left = priRow.get(j-1);
int right = priRow.get(j);
int sum = left + right;
row.add(sum);
}
row.add(1);
generate.add(row);
}
所有代码如下:
class Solution {
public List<List<Integer>> generate(int numRows) {
List<List<Integer>> generate = new ArrayList<>();
List<Integer> row1 = new ArrayList<>();
row1.add(1);//第一行
generate.add(row1);
for (int i = 1;i<numRows;i++){
List<Integer> row = new ArrayList<>();
row.add(1);
for (int j = 1;j<=i-1;j++){
List<Integer> priRow = generate.get(i-1);
int left = priRow.get(j-1);
int right = priRow.get(j);
int sum = left + right;
row.add(sum);
}
row.add(1);
generate.add(row);
}
return generate;
}
}
最终我们就能AC这道题啦,有哪里没看懂可以评论或者私信进行交流~~