Given a non-negative integer numRows, generate the first numRows of Pascal's triangle.
In Pascal's triangle, each number is the sum of the two numbers directly above it.
Example:
Input: 5
Output:
[
[1],
[1,1],
[1,2,1],
[1,3,3,1],
[1,4,6,4,1]
]
其实就是杨辉三角,学排列组合的时候大家都学过。
不过这里用不到排列组合,而是利用下面这句性质:
In Pascal's triangle, each number is the sum of the two numbers directly above it.
代码如下:
class Solution {
public List<List<Integer>> generate(int numRows) {
List<List<Integer>> res = new LinkedList<List<Integer>>();
if(numRows==0) return res;
List<Integer> cur = new LinkedList<Integer>();
cur.add(1);
res.add(new LinkedList<Integer>(cur));
List<Integer> cur_prev = cur;
for(int i = 2;i<=numRows;i++){
cur = new LinkedList<Integer>();
cur.add(1);
for(int j = 1;j<i-1;j++){//第i行有i个数字,索引为0,1,2,...i-1
cur.add( cur_prev.get(j-1) + cur_prev.get(j) );
}
cur.add(1);
res.add(new LinkedList<Integer>(cur));
cur_prev = cur;
}
return res;
}
}
更简单的代码:
注意下面的代码中,每次是在最前面添加1
class Solution {
public List<List<Integer>> generate(int numRows){
List<List<Integer>> res = new ArrayList<List<Integer>>();
ArrayList<Integer> cur = new ArrayList<Integer>();
for(int i=0;i<numRows;i++){
cur.add(0, 1);
for(int j=1;j<cur.size()-1;j++)
cur.set(j, cur.get(j)+cur.get(j+1));
res.add(new ArrayList<Integer>(cur));
}
return res;
}
}