您的位置:首页 > 其它

leetcode-Pascal's Triangle(I、II)

2016-06-06 08:10 411 查看
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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: