杨辉三角形杨辉三角形,每一行都是一个ArrayList
思路:先定义一个二维的数组集合List<List<Integer>> list=new ArrayList<>();因为杨辉三角形的每一行相当于一个一维数组集合。
再定义一个一维数组集合并且这个数组集合只有一个元素1,再将这个只有一个元素的数组集合放到二维的List当中,然后用for循环开始计算填充当前行一维数组集合的元素,在循环中new一个List,然后这个数组中的第一个元素是1,第二个元素要从数组1下标开始用for循环来填充,第二个元素下标是[i][j],那么这个元素怎么计算呢?[i][j]=[i-1][j]+[i-1][j-1](意思就是上一个一维数组集合的当前列的元素加上上一个一维数组集合的前一列元素)[i-1]之所以代表上一行是因为i所表示是一个一维数组集合的下标,你要计算当前行所在的数组集合里面的元素,就要找到上一个数组集合所在的行所以是[i-1]。计算当前行除第一个元素以外,首先要获取到上一行。第二个for循环的范围是j<i,因为每一行的最后一个元素也是1,只要计算中间的元素即可,最后再将计算好的一维数组集合添加到二维数组集合当中
class Solution {
public List<List<Integer>> generate(int numRows) {
List<List<Integer>> list=new ArrayList<>();
List<Integer> list1=new ArrayList<>();//先处理第一行
list1.add(1);
list.add(list1);
for(int i=1;i<numRows;i++){
List<Integer> curRow=new ArrayList<>();
curRow.add(1);//第二行的第一个元素是1
List<Integer> preRow=list.get(i-1);//获取当前行的上一行
for(int j=1;j<i;j++){
int val=preRow.get(j)+preRow.get(j-1);
curRow.add(val);
}
curRow.add(1);//每一行最后一个元素还是1
list.add(curRow);
}
return list;
}
}