题目描述: 给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。在杨辉三角中,每个数是它左上方和右上方的数的和。
示例:
输入: 5
输出:
[
[1],
[1,1],
[1,2,1],
[1,3,3,1],
[1,4,6,4,1]
]
解题思路:
每个数字等于上一行的左右两个数字之和,可用此性质写出整个杨辉三角。即第 n行的第 i个数等于第 n-1行的第 i-1数和第 i个数之和。这也是组合数的性质之一,即
C
n
i
=
C
n
−
1
i
+
C
n
−
1
i
−
1
\mathcal{C}_n^i=\mathcal{C}_{n-1}^i+\mathcal{C}_{n-1}^{i-1}
Cni=Cn−1i+Cn−1i−1
java代码
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);
}
else{
row.add(ret.get(i-1).get(j-1)+ret.get(i-1).get(j));
}
}
ret.add(row);
}
return ret;
}
}