问题描述
给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。
在「杨辉三角」中,每个数是它左上方和右上方的数的和。
个人思路
第一种:
- 先构建一个符合杨辉三角的二维数组arr和列表result
- 开始遍历1~numRows
- 初始arr[0][0] = 1,并存入列表中
- arr[i][j] = arr[i-1][j-1] +arr[i-1][j];
- 每一行最后一个元素赋值为1
代码如下
第一种
class Solution {
public List<List<Integer>> generate(int numRows) {
if (numRows < 1) return new ArrayList<>();
List<List<Integer>> result = new ArrayList<>();//将结果转换为列表
//构造二维数组
/*
0
00
000
*/
int [][] arr = new int [numRows][];
for (int i = 0; i < numRows; i++){
arr[i] = new int[i + 1];
for (int x = 0; x <= i; x++){
arr[i][x] = 0;
}
}
arr[0][0] = 1;
result.add(new ArrayList<>(){{add(1);}});//将[[1]]导入result中
for (int i = 1; i < numRows; i++){
List<Integer> num = new ArrayList<>();
arr[i][0] = 1;
num.add(arr[i][0]);
for (int j = 1; j<i; j++){
arr[i][j] = arr[i-1][j-1] +arr[i-1][j];
num.add(arr[i][j]);
}
arr[i][i] = 1;
num.add(arr[i][i]);
result.add(num);
}
return result;
}
}
class Solution{
public List<List<Integer>> generate(int numRows) {
if (numRows < 1) return new ArrayList<>();
List<List<Integer>> ans = new ArrayList<>();
ans.add(new ArrayList<>(){{add(1);}});
for (int i = 1; i < numRows; i++) {
Integer[] arr = new Integer[i + 1];
arr[0] = arr[i] = 1;
for (int x = 1; x < i; x++)
arr[x] = ans.get(i - 1).get(x) + ans.get(i - 1).get(x - 1);
ans.add(Arrays.asList(arr));
}
return ans;
}
}