题目118:
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] ]
分析:
class Solution {
public List<List<Integer>> generate(int numRows) {
//给定n输出其杨辉三角
List<List<Integer>> list=new ArrayList<>();
if(numRows<1)return list;
int [][] array=new int[numRows][numRows];
//首次
array[0][0]=1;
//初始值1
List<Integer> startList=new ArrayList<>();
startList.add(array[0][0]);
list.add(startList);
for(int i=1;i<numRows;i++){
List<Integer> subList=new ArrayList<>();
for(int j=0;j<=i;j++){
if(j==0){
//首列
array[i][j]=array[i-1][j];
}else{
//非首列
array[i][j]=array[i-1][j-1]+array[i-1][j];
}
subList.add(array[i][j]);
}
list.add(subList);
}
return list;
}
}
题目119:
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?
分析:
class Solution {
public List<Integer> getRow(int rowIndex) {
//只用k个空间,使用一维数组,对称实现
List<Integer> list=new ArrayList<>();
if(rowIndex<0)return list;
//开辟空间,比rowIndex多一个
int [] array=new int[rowIndex+1];
array[0]=1;
for(int i=1;i<rowIndex+1;i++){
for(int j=i;j>=1;j--){
array[j]+=array[j-1];
}
}
for(int i=0;i<array.length;i++){
list.add(array[i]);
}
return list;
}
}