给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。
解题思路
初始化一个二维数组,如果输入行数为0,直接返回,否则的话添加二维数组的第0行并设置值为1,之后做一个二重循环,第一重循环中再添加一行至二维数组中,添加首位数字为1,之后根据条件判断二重循环内,第二个数起都是由上一行的两个数相加,注意临界条件,最后置最后一个数为1,时间复杂度O(n2)代码如下
public class Main {
public List<List<Integer>> generate(int numRows) {
//初始化一个二维数组
List<List<Integer>> triangle = new ArrayList<>();
//如果行数为0,直接返回
if(numRows == 0){
return triangle;
}
//添加第一行数据,添加数据1
triangle.add(new ArrayList<Integer>());
triangle.get(0).add(1);
for(int i = 1;i < numRows;i++){
//新建列表,添加首位数字为1
triangle.add(new ArrayList<>());
triangle.get(i).add(1);
for(int j = 1;j<i;j++){
triangle.get(i).add(triangle.get(i-1).get(j-1)+triangle.get(i-1).get(j));
}
triangle.get(i).add(1);
}
return triangle;
}
public static void main(String[] args) {
Main test = new Main();
List<List<Integer>> generate = test.generate(5);
System.out.println(generate.toString());
}
}
运行结果
[[1], [1, 1], [1, 2, 1], [1, 3, 3, 1], [1, 4, 6, 4, 1]]