118.杨辉三角

题目描述

给定一个非负整数numRows,生成杨辉三角的前numRows行。
在杨辉三角中,每个数是它左上方和右上方的数的和。
示例:
1
输入: 5
2
输出:
3
[
4
[1],
5
[1,1],
6
[1,2,1],
7
[1,3,3,1],
8
[1,4,6,4,1]
9
]
Copied!

题解

解法1:
1
public List<List<Integer>> generate(int numRows) {
2
List<List<Integer>> list = new ArrayList<List<Integer>>();
3
if (numRows == 0) {
4
return list;
5
}
6
//先添加第一个1
7
List<Integer> prev = new ArrayList<>();
8
prev.add(1);
9
list.add(prev);
10
for (int i = 1; i < numRows; i++) {
11
List<Integer> curr = new ArrayList<>();
12
curr.add(1); //第1个是1
13
//中间部分是上一个相同位置和上一个相同位置的前一个之和
14
for (int j = 1; j < i; j++) {
15
curr.add(prev.get(j - 1) + prev.get(j));
16
}
17
curr.add(i, 1);//最后一个是1
18
prev = curr;
19
list.add(prev);
20
}
21
return list;
22
}
Copied!
解法2:借助数组
1
/**
2
1
3
1 1
4
1 2 1
5
1 3 3 1
6
1 4 6 4 1
7
*/
8
public List<List<Integer>> generate(int numRows) {
9
int[][] arry = new int[numRows][numRows];
10
List<Integer> list = new ArrayList;
11
for (int i = 0; i < numRows; i++) {
12
arry[i][0] = 1;
13
// List<Integer> list1 = new ArrayList<>();
14
list1.add(arry[i][0]);
15
for (int j = 1; j <= i; j++) {
16
arry[i][j] = arry[i-1][j-1] +arry[i-1][j];
17
list1.add(arry[i][j]);
18
}
19
list.add(list1);
20
}
21
return list;
22
}
Copied!
最近更新 8mo ago
复制链接