题目
给定一个非负整数 numRows
,生成「杨辉三角」的前 numRows
行。
在「杨辉三角」中,每个数是它左上方和右上方的数的和。
示例
输入: numRows = 5
输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]
输入: numRows = 1
输出: [[1]]
解决方案
就是一个简单的遍历
class Solution {
public List<List<Integer>> generate(int numRows) {
List<List<Integer>> result = new ArrayList<>();
if(numRows == 1) {
result.add(Arrays.asList(1));
} else if(numRows == 2) {
result.add(Arrays.asList(1));
result.add(Arrays.asList(1,1));
} else {
result.add(Arrays.asList(1));
result.add(Arrays.asList(1,1));
for (int i = 3; i <= numRows; i++) {
List<Integer> list = new ArrayList<>();
List<Integer> lastList = result.get(i - 2);
// 这一行加上第一个1
list.add(1);
// 遍历上一行(index从0到倒数第二个)
for (int j = 0; j < lastList.size() - 1; j++) {
list.add(lastList.get(j) + lastList.get(j+1));
}
// 这一行加上最后一个1
list.add(1);
result.add(list);
}
}
return result;
}
}