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

In Pascal's triangle, each number is the sum of the two numbers directly above it as shown:

Example 1:

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

Example 2:

Input: numRows = 1 Output: [[1]]

Constraints:

  • 1 <= numRows <= 30

Note: This problem is from LeetCode.
❌ Compiled
❌ Executed
❌ Correct
program pascals_triangle
    implicit none

    integer :: numRows
    integer :: i, j
    integer :: row(numRows)

    do i = 1, numRows
        if (i == 1) then
            row(i) = 1
        else
            row(i) = 1
            do j = 2, i - 1
                row(j) = row(j - 1) + row(j)
            end do
        end if
        print '(*(I1, :, ","))', row
    end do

end program pascals_triangle
❌ Compiled
❌ Executed
❌ Correct
```
program pascals_triangle
    implicit none
    integer, parameter :: num_rows = 5
    integer :: i, j
    integer, dimension(num_rows, num_rows) :: triangle

    ! Initialize the first row
    triangle(1, :) = 1

    ! Loop through the remaining rows
    do i = 2, num_rows
        ! Loop through the elements of the current row
        do j = 1, i
            ! Calculate the element value
            if (j == 1 .or. j == i) then
                triangle(i, j) = 1
            else
                triangle(i, j) = triangle(i-1, j-1) + triangle(i-1, j)
            end if
        end do
    end do

    ! Print the triangle
    do i = 1, num_rows
        write (*, '(10I5)') triangle(i, :)
    end do
end program pascals_triangle
```
🌐 Data from online sources
def generate(numRows):
    pascalsTriangle = []
    for i in range(numRows):
        row = [1]
        if i > 0:
            for j in range(1, i):
                row.append(pascalsTriangle[i-1][j-1] + pascalsTriangle[i-1][j])
            row.append(1)
        pascalsTriangle.append(row)
    return pascalsTriangle

The algorithm iterates through each row of Pascal's Triangle, from 0 to numRows-1, and generates the corresponding row with the required values based on the row index. For each row, it initializes an array or list, and then sets the first element to 1 (since all rows start with 1).

Next, we iterate from the second element to the (i-1)-th element of the row (i being the row index). Each element (at index j) of the row is set to the sum of the two values positioned just above it in the previous row - these values are available at (i-1, j-1) and (i-1, j) in Pascal's Triangle.

If the current row is not the first row, we add another 1 at the end of the row, since all rows end with 1 (except the very first row).

Finally, we append the row to the resulting Pascal's Triangle structure (list of lists or vector of vectors). After completing the loop, the algorithm returns the Pascal's Triangle structure containing numRows.

🌐 Data from online sources
vector<vector<int>> generate(int numRows) {
    vector<vector<int>> pascalsTriangle(numRows);
    for (int i = 0; i < numRows; i++) {
        pascalsTriangle[i].resize(i + 1);
        pascalsTriangle[i][0] = pascalsTriangle[i][i] = 1;
        for (int j = 1; j < i; j++) {
            pascalsTriangle[i][j] = pascalsTriangle[i - 1][j - 1] + pascalsTriangle[i - 1][j];
        }
    }
    return pascalsTriangle;
}

The algorithm iterates through each row of Pascal's Triangle, from 0 to numRows-1, and generates the corresponding row with the required values based on the row index. For each row, it initializes an array or list, and then sets the first element to 1 (since all rows start with 1).

Next, we iterate from the second element to the (i-1)-th element of the row (i being the row index). Each element (at index j) of the row is set to the sum of the two values positioned just above it in the previous row - these values are available at (i-1, j-1) and (i-1, j) in Pascal's Triangle.

If the current row is not the first row, we add another 1 at the end of the row, since all rows end with 1 (except the very first row).

Finally, we append the row to the resulting Pascal's Triangle structure (list of lists or vector of vectors). After completing the loop, the algorithm returns the Pascal's Triangle structure containing numRows.