118.杨辉三角
题目:给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。在「杨辉三角」中,每个数是它左上方和右上方的数的和。
难度:简单
示例 1:
输入: numRows = 5
输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]
示例 2:
输入: numRows = 1
输出: [[1]]
提示:
1 <= numRows <= 30
分析:
可以将杨辉三角看成如下:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
易知,每行的第一列(j=0)和最后一列(j=i)的元素都为1;
中间的规律为:a [ i ][ j ] = a [ i - 1 ][ j - 1 ] + a [ i - 1 ][ j ]
代码如下:
class Solution {
public List<List<Integer>> generate(int numRows) {
List<List<Integer>> ret = new ArrayList<List<Integer>>();
for( int i = 0; i < numRows; i ++){
List<Integer> row = new ArrayList<Integer>();
for( int j = 0; j <= i; j ++){
if( j == 0 || j == i)
row.add(1);//将每行的第一列和最后一列设为1
else row.add(ret.get(i - 1).get(j - 1) + ret.get(i - 1).get(j));
}
ret.add(row);
}
return ret;
}
}