问题:
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] ]
解决:
①直接计算,除第一行外,其余每行从第二个元素开始都是上一行中两个元素之和。可以使用ArrayList进行存储。注意,每行第一个和最后一个元素都是1。若输入为0,返回result为空而不是返回null。耗时1ms。
public class Solution {
public List<List<Integer>> generate(int numRows) {
List<List<Integer>> result = new ArrayList<>();
List<Integer> preList = new ArrayList<>();
if(numRows <= 0)return result;
preList.add(1);
result.add(preList);
for (int i = 2 ;i <= numRows ;i ++ ) {
List<Integer> list = new ArrayList<>();
list.add(1);
for (int j = 0;j < preList.size() - 1 ;j ++ ) {
list.add(preList.get(j) + preList.get(j + 1));
}
list.add(1);
result.add(list);
preList = list;
}
return result;
}
}
②使用二维数组存储Pascal三角的数据,最后再将数组转换为List。
public class Solution {
public List<List<Integer>> generate(int numRows) {
int [][] res = new int[numRows][];//定义整个三角
for(int i = 0;i<numRows;i++){//行
res[i] = new int[i+1];//定义行
for(int j=0;j<i+1;j++){//列
if(j==0||j==i){
res[i][j]=1;
}else{
res[i][j]=res[i-1][j-1]+res[i-1][j];
}
}
}
List list = Arrays.asList(res);
return list;
}
}