118. Pascal's Triangle
翻译:给定行数,生成Pascal三角的第一行?(应该是所有行,不止第一行)
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] ]
大神代码(rheaxu)
public class Solution {
public List<List<Integer>> generate(int numRows)
{
List<List<Integer>> allrows = new ArrayList<List<Integer>>();//1.泛型,<>中的内容是指定该数组中存的类型,如这句,意为该数组中每个元素都是一个List数组,而且该list数组中每个元素都是Integer。2.多态,List是一个接口,ArrayList是其实现类,可看作子类(不对的话请读者指正),多态是指父类的引用指向子类对象,也就是List类的引用实际指向ArrayList,而在运行中,会调用子类重写的父类的方法。具体可查阅多态相关资料。
ArrayList<Integer> row = new ArrayList<Integer>();//1.泛型,该ArrayList数组中存放的元素类型为Integer
for(int i=0;i<numRows;i++)
{
row.add(0, 1);
//add和set的区别 set()是更新,更新指定下标位置的值。
//add()是添加,区别于一般的add(E e),这个就是有个位置的概念,特殊位置之后的数据,依次往后移动就是了。
//在此意思为,将第0位设置为1,其它元素依次往后挪,这也就实现了随着层数增加,大小增加。
for(int j=1;j<row.size()-1;j++)//只设置中间的内容,等于上一行的对应位置相加,第一位和最后一位不做处理,第一位也就是下标为0的位置已设为1,最后一位是前面推后的,也是1
row.set(j, row.get(j)+row.get(j+1));
allrows.add(new ArrayList<Integer>(row));
}
return allrows;
}
}
我的代码
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.lang.Integer;
class Solution {
public List<List<Integer>> generate(int numRows) {
Map lists=new HashMap();
for(int i=2;i<numRows;i++){
List<Integer> list = new ArrayList<Integer>();
lists.put(("list"+i),list);
}
List<List<Integer>> List = new ArrayList<List<Integer>>();
if (numRows==0)
return List;
List<Integer> list0 = new ArrayList<Integer>();
List<Integer> list1 = new ArrayList<Integer>();
List<Integer> temp = new ArrayList<Integer>();
list0.add(1);
List.add(list0);
if (numRows==1)
return List;
list1.add(1);
list1.add(1);
List.add(list1);
if (numRows==2)
return List;
for (int i = 2; i < numRows; i++) {
temp=List.get(i-1);
List<Integer> listi =(java.util.List<Integer>) lists.get(("list"+i));
listi.add(1);
for (int j=1;j<i;j++){
listi.add(temp.get(j-1)+temp.get(j));
}
listi.add(1);
List.add(listi);
}
return List;
}
}