118.杨辉三角

题目描述

给定一个非负整数numRows,生成杨辉三角的前numRows行。

在杨辉三角中,每个数是它左上方和右上方的数的和。

示例:

输入: 5
输出:
[
[1],
[1,1],
[1,2,1],
[1,3,3,1],
[1,4,6,4,1]
]

题解

解法1:

public List<List<Integer>> generate(int numRows) {
List<List<Integer>> list = new ArrayList<List<Integer>>();
if (numRows == 0) {
return list;
}
//先添加第一个1
List<Integer> prev = new ArrayList<>();
prev.add(1);
list.add(prev);
for (int i = 1; i < numRows; i++) {
List<Integer> curr = new ArrayList<>();
curr.add(1); //第1个是1
//中间部分是上一个相同位置和上一个相同位置的前一个之和
for (int j = 1; j < i; j++) {
curr.add(prev.get(j - 1) + prev.get(j));
}
curr.add(i, 1);//最后一个是1
prev = curr;
list.add(prev);
}
return list;
}

解法2:借助数组

/**
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
*/
public List<List<Integer>> generate(int numRows) {
int[][] arry = new int[numRows][numRows];
List<Integer> list = new ArrayList;
for (int i = 0; i < numRows; i++) {
arry[i][0] = 1;
// List<Integer> list1 = new ArrayList<>();
list1.add(arry[i][0]);
for (int j = 1; j <= i; j++) {
arry[i][j] = arry[i-1][j-1] +arry[i-1][j];
list1.add(arry[i][j]);
}
list.add(list1);
}
return list;
}