大学时候的经典题目,满满的回忆。
key point,是建立一个二维数组。
ArrayList的扩容机制:
当向ArrayList中添加元素的时候,ArrayList的存储容量如果满足新元素的容量要求,则直接存储;ArrayList的存储容量如果不满足新元素的容量要求,ArrayList会增加自身的存储大小,以达到存储新元素的要求。
public boolean add(E e) {
//判断是否可以容纳e,若能,则直接添加在末尾;若不能,则进行扩容,然后再把e添加在末尾
ensureCapacityInternal(size + 1); // Increments modCount!!
//将e添加到数组末尾
elementData[size++] = e;
return true;
}
不像int[][]型的二维数组需要一开始就确认大小关系,这样可以节省大量的空间
public List<List<Integer>> generate(int numRows) {
List<List<Integer>> resultArray=new ArrayList<List<Integer>>();
if(numRows==0)
return resultArray;
if(numRows==1){
resultArray.add(new ArrayList<Integer>());
resultArray.get(0).add(0,1);
return resultArray;
}
if(numRows==2){
resultArray.add(new ArrayList<Integer>());
resultArray.get(0).add(0,1);
resultArray.add(new ArrayList<Integer>());
resultArray.get(1).add(0,1);
resultArray.get(1).add(1,1);
return resultArray;
}
else{
resultArray.add(new ArrayList<Integer>());
resultArray.get(0).add(0,1);
resultArray.add(new ArrayList<Integer>());
resultArray.get(1).add(0,1);
resultArray.get(1).add(1,1);
for(int j=2;j<numRows;j++){
resultArray.add(new ArrayList<Integer>());
resultArray.get(j).add(0,1);
for(int i=1;i<j;i++){
resultArray.get(j).add(i,resultArray.get(j-1).get(i-1)+resultArray.get(j-1).get(i));
}
resultArray.get(j).add(j,1);
}
return resultArray;
}
}