题目
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]
]
思路
刚看到这个题目的时候,不知道这个三角形是什么也,百度了才知道这个就是我们熟知的杨辉三角。杨辉三角有如下的性质:
1):第i层有i个元素
2)每层的第i个元素等于上一层的第i-1个元素和第i个元素之和。且第1个和最后一个元素均为1.
利用如上的两个性质,编码实现就相当简单了。
实现代码如下:
public class Solution {
/*
* 思路:根据层数来算出杨辉三角的值
* 杨辉三角的特性:第i层有i个元素,且每层的元素等于上一层的两个元素之后
* */
public List<List<Integer>> generate(int numRows) {
List<List<Integer>> res=new ArrayList<List<Integer>>();
if(numRows<1){
return res;
}
List<Integer> temp=new ArrayList<Integer>();
temp.add(new Integer(1));
res.add(temp);
for(int i=2;i<=numRows;i++){//从第二层开始
List<Integer> I_Res=new ArrayList<Integer>();
I_Res.add(1);//每层的第一个元素均是1
for(int j=1;j<i-1;j++){//算每层中间的元素,等于上一层的两个元素之和
int num=temp.get(j-1)+temp.get(j);//要注意的是j出界,为避免出界,因此将每层的最后一个元素分开加入
I_Res.add(num);
}
I_Res.add(1);//每层的最后一个元素也为1;
res.add(I_Res);
//I_Res.clear();//清零
temp=new ArrayList<Integer>(I_Res);//更新,供下一层的计算
}
return res;
}
}