【Leetcode】118. Pascal's Triangle

来源:互联网 发布:海贼王启航礼包淘宝 编辑:程序博客网 时间:2024/06/06 08:40

方法一:递归

思路:

(1)若numRows不大于0,则直接返回result。

(2)若numRows为1,则构造相应result并返回。

(3)否则,递归求前numRows-1行的结果res,加入result。再依次遍历res的最后一行,每相邻两个元素求和得到对应位置的数,在前后加上1后加入result。

public class Solution {    public List<List<Integer>> generate(int numRows) {        List<List<Integer>> result = new  ArrayList<List<Integer>>();        if (numRows <= 0)            return result;        if (numRows == 1) {            List<Integer> temp = new ArrayList<Integer>();            temp.add(1);            result.add(temp);            return result;        }        List<Integer> temp = new ArrayList<Integer>();        temp.add(1);        List<List<Integer>> res = generate(numRows - 1);        result.addAll(res);        int size = res.size();        List<Integer> tmp = res.get(size - 1);        int len = tmp.size();        for (int i = 0; i < len - 1; i++)             temp.add(tmp.get(i) + tmp.get(i + 1));        temp.add(1);        result.add(temp);        return result;    }}
Runtime:1ms


方法二:非递归

思路:

(1)若numRows不大于0,则直接返回result。

(2)先构造第1行的结果放入result。

(3)从第2行开始,依次求每一行的结果。前一行的每相邻两个元素求和得到当前行对应位置的数,在前后加上1后加入result。

public class Solution {    public List<List<Integer>> generate(int numRows) {        List<List<Integer>> result = new  ArrayList<List<Integer>>();        if (numRows <= 0)            return result;        List<Integer> temp = new ArrayList<Integer>();        temp.add(1);        result.add(temp);        for (int i = 1; i < numRows; i++) {            temp = new ArrayList<Integer>();            temp.add(1);            int size = result.size();            List<Integer> tmp = result.get(size - 1);            int len = tmp.size();                    for (int j = 0; j < len - 1; j++)                 temp.add(tmp.get(j) + tmp.get(j + 1));            temp.add(1);            result.add(temp);        }        return result;    }}
Runtime:1ms

1 0