题目:
Given numRows, generate the first numRows of Pascal's triangle.
For example, given numRows = 5,
Return
[ [1], [1,1], [1,2,1], [1,3,3,1], [1,4,6,4,1] ]
题意:
这题考察的是杨辉三角,给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。
解题思路:
找规律: 每个数都是它左上方与它右上方的和 。
用数组表示:
a[i][j] = a[i-1][j-1]+a[i-1][j];
由于返回值是 ArrayList<ArrayList<Integer>> ,所以我们需要一个辅助集合temp 来收集每行的值。
当每列j =0;或者到达 右临界点时,temp.add(1)
需要注意的是numRows为0 时,并不需要返回null,而是返回[]集合。
代码:
public ArrayList<ArrayList<Integer>> generate(int numRows) {
if(numRows <0) {
return null;
}
ArrayList<ArrayList<Integer>> list = new ArrayList<ArrayList<Integer>>();
for(int i =0;i<numRows;i++) {
ArrayList<Integer> temp = new ArrayList<Integer>();
for(int j =0;j<=i;j++) {
if(j ==0 || j==i) {
temp.add(1);
}
else {
temp.add(list.get(i-1).get(j-1) + list.get(i-1).get(j));
}
}
list.add(temp);
}
return list;
}