118 Pascal's Triangle
题目详情
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]
理解
- 首先我们要先理解一下pascal三角形(杨辉三角),每行端点与结尾的数为1,每个数等于它上方两数之和。
- 解法的实现还是比较简单的。首先要对特殊情况进行处理(numRows小于等于0的情况)。然后循环,每一次产生一个List,i个list有i个元素,每个list的第一个和第i个元素都是1.
- 对于list中间的那些元素,则找出前一个list的对应位置的两个元素加和即可得到。
解法
public List<List<Integer>> generate(int numRows) {
List<List<Integer>> triangle = new ArrayList<List<Integer>>();
if (numRows <=0){
return triangle;
}
for (int i=0; i<numRows; i++){
List<Integer> row = new ArrayList<Integer>();
for (int j=0; j<i+1; j++){
if (j==0 || j==i){
row.add(1);
} else {
row.add(triangle.get(i-1).get(j-1)+triangle.get(i-1).get(j));
}
}
triangle.add(row);
}
return triangle;
}
119 Pascal's Triangle2
题目详情
Given an index k, return the kth row of the Pascal's triangle.
For example, given k = 3,
Return [1,3,3,1].
Note:
Could you optimize your algorithm to use only O(k) extra space?
理解
- 这道题和118一样,都是基于帕斯卡三角形的。这一道题只要求返回List形式的、一行的元素即可。
- 这道题有个额外的要求就是只消耗O(k)的额外空间
- 于是我们只在方法最开始声明一个list,以后每一行的结果都保存在这个list中,同时根据list中元素的值计算出的下一行的元素覆盖掉计算过的元素。
解法
public List<Integer> getRow(int rowIndex) {
List<Integer> list = new ArrayList<Integer>();
if(rowIndex < 0 ){
return list;
}
for(int i=0;i < rowIndex+1;i++){
list.add(0,1);
for(int j=1;j<list.size()-1;j++){
list.set(j, list.get(j)+list.get(j+1));
}
}
return list;
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。