"""
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
"""
from typing import List

class PascalsTriangle:
    def generate(self, numRows: int) -> List[List[int]]:
        res, cur = [], []
        for r in range(numRows):
            for i in range(r - 1, 0, -1):
                cur[i] = cur[i] + cur[i - 1]
            cur.append(1)
            res.append(cur.copy())
        return res
