leetcode-Pascal's Triangle(I、II)

来源:互联网 发布:淘宝直播添加到首页 编辑:程序博客网 时间:2024/04/30 02:44

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;    }}
0 0
原创粉丝点击