2015年6月29日星期一

Pascal's Triangle leetcode

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]
]
用一个指针保存前一行, 然后每个新行要根据前一行得出. 时间复杂度O(1 + 2 + 3...n) = O(n^2)

public class Solution {
    public List<List<Integer>> generate(int numRows) {
        List<List<Integer>> res = new ArrayList<List<Integer>>();
        if (numRows <= 0) {
            return res;
        }
        List<Integer> tem = new ArrayList<Integer>();
        tem.add(1);
        res.add(tem);
        for (int i = 2; i <= numRows; i++) {
            List<Integer> cur = new ArrayList<Integer>();
            cur.add(1);
            for (int j = 0; j < tem.size() - 1; j++) {
                cur.add(tem.get(j) + tem.get(j + 1));
            }
            cur.add(1);
            res.add(cur);
            tem = cur;
        }
        return res;
    }
}
//只用一个list的做法
public class Solution {
    public List<List<Integer>> generate(int numRows) {
        List<List<Integer>> res = new ArrayList<List<Integer>>();
        if (numRows <= 0) {
            return res;
        }
        List<Integer> tem = new ArrayList<Integer>();
        tem.add(1);
        res.add(new ArrayList<Integer>(tem));
        for (int i = 2; i <= numRows; i++) {
            int size = tem.size();
            for (int j = size - 1; j > 0; j--) {
                int cur = tem.get(j) + tem.get(j - 1);
                tem.set(j, cur);
            }
            tem.add(1);
            res.add(new ArrayList<Integer>(tem));
        }
        return res;
    }
}

没有评论:

发表评论