Pascal's Triangle
Build the first numRows of Pascal's Triangle — row[j] = prevRow[j-1] + prevRow[j].
2 min read
dp combinatorics
Problem#
Return the first numRows rows of Pascal’s Triangle.
Examples#
numRows = 5→[[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]
Constraints#
1 <= numRows <= 30.
Approach#
Iterative build row by row.
Solution#
class Solution {public: vector<vector<int>> generate(int numRows) { vector<vector<int>> out; for (int i = 0; i < numRows; ++i) { vector<int> row(i + 1, 1); for (int j = 1; j < i; ++j) row[j] = out[i - 1][j - 1] + out[i - 1][j]; out.push_back(move(row)); } return out; }};func generate(numRows int) [][]int { out := make([][]int, 0, numRows) for i := 0; i < numRows; i++ { row := make([]int, i+1) for j := range row { row[j] = 1 } for j := 1; j < i; j++ { row[j] = out[i-1][j-1] + out[i-1][j] } out = append(out, row) } return out}class Solution: def generate(self, numRows: int) -> List[List[int]]: out: List[List[int]] = [] for i in range(numRows): row = [1] * (i + 1) for j in range(1, i): row[j] = out[i - 1][j - 1] + out[i - 1][j] out.append(row) return outfunction generate(numRows) { const out = []; for (let i = 0; i < numRows; i++) { const row = new Array(i + 1).fill(1); for (let j = 1; j < i; j++) { row[j] = out[i - 1][j - 1] + out[i - 1][j]; } out.push(row); } return out;}class Solution { public List<List<Integer>> generate(int numRows) { List<List<Integer>> out = new ArrayList<>(); for (int i = 0; i < numRows; i++) { List<Integer> row = new ArrayList<>(i + 1); for (int j = 0; j <= i; j++) row.add(1); for (int j = 1; j < i; j++) { row.set(j, out.get(i - 1).get(j - 1) + out.get(i - 1).get(j)); } out.add(row); } return out; }}function generate(numRows: number): number[][] { const out: number[][] = []; for (let i = 0; i < numRows; i++) { const row: number[] = new Array(i + 1).fill(1); for (let j = 1; j < i; j++) { row[j] = out[i - 1][j - 1] + out[i - 1][j]; } out.push(row); } return out;}Editorial#
The literal recurrence. Boundary cells [0] and [i] are always 1; interior cells are sums of two above.
Complexity#
- Time: O(n²).
- Space: O(n²).
Concept revision#
Related#