class Solution { public List<List<Integer>> generate(int numRows) { List<List<Integer>> ret=new ArrayList<>(); List<Integer> cur=new ArrayList<>(); cur.add(1); ret.add(cur); for(int i=1;i<numRows;i++){ 这个循环的目的是要一层一层的增加 List<Integer> curh=new ArrayList<>(); 要求的那一层 curh.add(1); for(int j=1;j<i;j++){ 这个目的是取上一层的元素来求中间 List<Integer>prev=ret.get(i-1); curh.add(prev.get(j)+prev.get(j-1)); } curh.add(1); ret.add(curh);} //加一层 return ret; } }
核心思路:创造一种类似于二维数组的模式,选择二维的顺序表:然后我们是选择一层一层的去创造,第一层我们是用一个顺序表来表示(里面是一个一),ret.()里面是顺序表才能表示二维数组中的第一层顺序表,然后开始进入循环开始层层的遍历,每层的头和尾都是1,然后中间的数就取决于上一层的东西,就像我们在二维数组中学习到的———————-[i][j]=[i-1][j]+[i-1][j-1]
有点注意的东西:
1.首先这个题所谓的第一层,是我们的从0开始,这也会导致我们在处理部分边界时候可能存在问题。
2.看好函数返回类型,所以我们要返回我们的二层顺序表。