Problem

Given an integer numRows, return the first numRows of Pascal’s triangle.

Example

Input:  5
Output: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]

Solution

Each row starts and ends with 1. Middle values are sum of the two values above.

def generate(num_rows):
    triangle = []
    for i in range(num_rows):
        row = [1] * (i + 1)
        for j in range(1, i):
            row[j] = triangle[i-1][j-1] + triangle[i-1][j]
        triangle.append(row)
    return triangle
function generate(numRows) {
    const triangle = [];
    for (let i = 0; i < numRows; i++) {
        const row = new Array(i + 1).fill(1);
        for (let j = 1; j < i; j++) {
            row[j] = triangle[i-1][j-1] + triangle[i-1][j];
        }
        triangle.push(row);
    }
    return triangle;
}
vector<vector<int>> generate(int numRows) {
    vector<vector<int>> triangle;
    for (int i = 0; i < numRows; i++) {
        vector<int> row(i + 1, 1);
        for (int j = 1; j < i; j++) {
            row[j] = triangle[i-1][j-1] + triangle[i-1][j];
        }
        triangle.push_back(row);
    }
    return triangle;
}
public List<List<Integer>> generate(int numRows) {
    List<List<Integer>> triangle = new ArrayList<>();
    for (int i = 0; i < numRows; i++) {
        List<Integer> row = new ArrayList<>();
        for (int j = 0; j <= i; j++) row.add(1);
        for (int j = 1; j < i; j++) {
            row.set(j, triangle.get(i-1).get(j-1) + triangle.get(i-1).get(j));
        }
        triangle.add(row);
    }
    return triangle;
}

Complexity

  • Time: O(n²)
  • Space: O(n²)

Explanation

Each row depends only on the previous row. We build top-down, using the formula row[j] = above[j-1] + above[j].

Share this article

Comments

Join the discussion. Got a question, found an issue, or want to share your experience?

Leave a Comment

Your email stays private. We just use it for replies.

Nothing to preview yet.

Use **bold**, *italic*, `code`, ```code blocks```, [link](url), > quote, - list