跳转至

118.杨辉三角

题目描述

给定一个非负整数numRows,生成杨辉三角的前numRows行。

在杨辉三角中,每个数是它左上方和右上方的数的和。

示例:

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

题解

解法1:

public List<List<Integer>> generate(int numRows) {
    List<List<Integer>> list = new ArrayList<List<Integer>>();
    if (numRows == 0) {
        return list;
    }
    //先添加第一个1
    List<Integer> prev = new ArrayList<>();
    prev.add(1);
    list.add(prev);
    for (int i = 1; i < numRows; i++) {
        List<Integer> curr = new ArrayList<>();
        curr.add(1); //第1个是1
        //中间部分是上一个相同位置和上一个相同位置的前一个之和
        for (int j = 1; j < i; j++) {
            curr.add(prev.get(j - 1) + prev.get(j));
        }
        curr.add(i, 1);//最后一个是1
        prev = curr;
        list.add(prev);
    }
    return list;
}

解法2:借助数组

/**
1
1 1 
1 2 1
1 3 3 1
1 4 6 4 1
*/
public List<List<Integer>> generate(int numRows) {
    int[][] arry = new int[numRows][numRows];
    List<Integer> list = new ArrayList;
    for (int i = 0; i < numRows; i++) {
        arry[i][0] = 1;
        // List<Integer> list1 = new ArrayList<>();
        list1.add(arry[i][0]);
        for (int j = 1; j <= i; j++) {
            arry[i][j] = arry[i-1][j-1] +arry[i-1][j];
            list1.add(arry[i][j]);
        }
        list.add(list1);
    }
    return list;
}