Problems:
(1)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]
]
(2)Given an index k, return the kth row of the Pascal’s triangle.
For example, given k = 3,
Return [1,3,3,1].
Solution:
(1)其实这个问题并不难,listAll中包含listOne,在求该个listOne的时候需要调用前一个listOne.
public class Solution {
public List<List<Integer>> generate(int numRows) {
List<List<Integer>> listAll = new ArrayList<List<Integer>>();
if(numRows == 0) return listAll;
List<Integer> listOne = new ArrayList<Integer>();
listOne.add(1);
listAll.add(one);
for(int i = 1 ; i < numRows ; i++){
List<Integer> newlist = new ArrayList<Integer>();
newlist.add(1);
for(int j = 1 ; j < i ; j++){
newlist.add(j,listAll.get(i-1).get(j-1)+listAll.get(i-1).get(j));
}
newlist.add(1);
listAll.add(i,newlist);
}
return listAll;
}
}
***但是我犯了一个非常难以找出来的错误,发出来与大家共享。我初始化了一个公用listOne,在for循环中,每次都清空listOne,也就是listOne.clear(),然后再放下一组数据。
注意,这样做会影响所有跟listOne有关的变量。比如listAll中存储的listOne也会被清空。所以不要轻易用clear()命令。***
后来改成在for循环中,每次新定义一个newlist,这样的话就不会对前一个newlist造成影响,更不会影响listAll这个list了。
(2) 其实第一个问题做出来了,这个问题的思路和第一个一样。
不同的是,这里需要单独用一个list保存上一个数据。
public class Solution {
public List<Integer> getRow(int rowIndex) {
List<Integer> one = new ArrayList<Integer>();
one.add(1);
//第0行
if(rowIndex == 0) return one;
//从第1行开始
for(int i = 1 ; i <= rowIndex ; i++){
List<Integer> newlist = new ArrayList<Integer>();
newlist.add(1);
for(int j = 1 ; j < i ; j++){
newlist.add(j,one.get(j-1)+one.get(j));
}
newlist.add(1);
one = newlist;
}
return one;
}
}