LeetCode刷题记录3------杨辉三角(简单)

题目描述:

给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。
在杨辉三角中,每个数是它左上方和右上方的数的和。

示例:

输入: 5
输出:
[1],
[1,1],
[1,2,1],
[1,3,3,1],
[1,4,6,4,1]

思路:

我们知道杨辉三角的一行,则可以通过相邻值计算出下面的一行,而且我们知道每一行的第一个元素和最后一个元素都是1,此外我们处理3个特殊的numRows输入,分别是012。可以采用List集合来存储每一行的数据,再把每一行的数据存入另一个List集合。

代码实现:

class Solution {
    public List> generate(int numRows) {
        List> triangle = new ArrayList<>();
        if (numRows == 0){
            return triangle;
        }
        triangle.add(new ArrayList<>());
        triangle.get(0).add(1);
        if (numRows == 1){
            return triangle;
        }
        triangle.add(new ArrayList<>());
        triangle.get(1).add(1);
        triangle.get(1).add(1);
        if (numRows == 2){
            return triangle;
        }
        if (numRows > 2){
            for (int rowNum = 2; rowNum < numRows ; rowNum++) {
                List row = new ArrayList<>();
                //每一行的前第一个元素都是1
                row.add(1);
                List prevRow = triangle.get(rowNum-1);
                //利用前一行集合计算当前行除第一个和最后元素的集合
                for (int i = 1; i < rowNum; i++) {
                   row.add(i,prevRow.get(i-1) + prevRow.get(i));
                }
                //每一个行的最后一个元素都是1
                row.add(rowNum,1);
                triangle.add(row);
            }
        }
        return triangle;
    }
}

你可能感兴趣的:(LeetCode刷题记录3------杨辉三角(简单))