Given a non-negative integer numRows, generate the first numRows of Pascal’s triangle.
In Pascal’s triangle, each number is the sum of the two numbers directly above it.
Example:
Input: 5
Output:
[
[1],
[1,1],
[1,2,1],
[1,3,3,1],
[1,4,6,4,1]
]
https://leetcode.com/problems/pascals-triangle/description/
题意:输出给定行数的帕斯卡三角形
bug:
1、想清楚固定的输出列表只有List,所以可以全局声明,列表data是每行都变的,所以每次局部声明
2、prev重复声明了两次,一次new一次list.get()
3、因为外层i和j对应了第几行第几个元素,对应位置要取=;但是list和ArrayList的索引值都是从0开始,对应位置时要-1
知识点:Arraylist和List
1、声明方式List<List<Integer>> list = new ArrayList<>();
,new就是创建一个新的;
List<Integer> prev = list.get(i - 2);
这种也是声明
2、return null
返回空
3、list.add(1);
1是添加进去的数值(添加在数组的后面)
4、list.get(1);
1是要得到的索引值
5、ArrayList有顺序,索引从0开始,可以重复
class Solution {
public List<List<Integer>> generate(int numRows) {
if (numRows < 0) {
return null;
}
List<List<Integer>> list = new ArrayList<>();//想象成二维数组
if (numRows >= 1) {
List<Integer> data = new ArrayList<>();//想象成一维数组
data.add(1);
list.add(data);//第一行
}
if (numRows >= 2) {
List<Integer> data = new ArrayList<>();
data.add(1);
data.add(1);
list.add(data);//第二行
}
if (numRows >=3) {
for (int i = 3; i <=numRows; i++) {//此处设置i=3是为了方便行数对应,相当于前两行的位置是i=2和i=1
//i代表第几行,j用来循环次数,因为data.add直接放置,不需要定位
List<Integer> data = new ArrayList<>();
List<Integer> prev = list.get(i - 2);//前一行
data.add(1);//当前行的第一个元素
for (int j = 2; j <= i -1; j++) {//当前行中间不为1的元素们
data.add(prev.get(j - 2) + prev.get(j - 1));//当前行的当前元素是前一行的两个元素之和
}
data.add(1);//当前行的最后一个元素
list.add(data);//放置当前行
}
}
return list;
}
}