杨辉三角
给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。
在「杨辉三角」中,每个数是它左上方和右上方的数的和。
示例 1:
输入: numRows = 5
输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]
示例 2:
输入: numRows = 1
输出: [[1]]
(上述题目来源于LeetCode)
解法:
class Solution {
public List<List<Integer>> generate(int numRows) {
//定义一个存储整数对象的列表的列表
List<List<Integer>> result = new ArrayList<List<Integer>>();
//i是行数
for(int i = 0;i < numRows;i++){
//每一行都是一个存储整数对象的列表,j是每一行的元素
List<Integer> res = new ArrayList<Integer>();
//每一行的元素个数等于这一行的行数
for(int j = 0;j <= i;j++){
//如果是每一行的第一个或者最后一个数,等于1,将1添加进去
if(j == 0 || j == i){
res.add(1);
}else{ //这个数等于上一行的j-1和j两个数的和
res.add(result.get(i-1).get(j-1) + result.get(i-1).get(j));
}
}
//将这一行数添加进列表
result.add(res);
}
return result;
}
}
在这一道题目中,运用到 list列表,在这里记录一下列表的使用。
此处可以参考博客:Java基础教程——List(列表)
实现List接口的子类有两种:ArrayList类 和 LinkedList类。
ArrayList类的底层是由数组实现,其用法类似于数组,其容量可按需要动态调整,所以也称其为动态数组。ArrayList不是同步的,在多线程环境下不安全,但是可以用Collections.synchronizedList(…)将其转为线程安全的列表。另外,ArrayList每一次扩容至原本容量的1.5倍,查询快,增删慢。LinkedList类的底层是由链表实现的,查询慢,增删快,适合用于需要大量插入、删除数据的场合,适合采用迭代器Iterator遍历。
在本题中,List<Integer>
指的是一个储存整数对象的列表,在本题中它存储了杨辉三角中的一行。List<List<Integer>>
则表示一个储存整数对象的列表的列表,在本题中它储存了整个杨辉三角。