// TypeScript
function generate(numRows: number): number[][] {
  if (numRows === 1) {
    return [[1]];
  }

  let ans: number[][] = [[1]];
  for (let r = 1; r < numRows; r++) {
    const prev: number[] = ans[r-1];
    const curr: number[] = Array(r + 1).fill(0).map((_, idx) => (idx === 0 || idx === r) ? 1 : 0);
    for (let i = 0; i < prev.length - 1; i++) {
      curr[i+1] = prev[i] + prev[i+1];
    }
    ans.push(curr);
  }

  return ans;
};

function generate2(numRows: number): number[][] {
  // combinatorial formula
  let ans: number[][] = [];

  for (let i = 0; i < numRows; i++) {
    const row: number[] = [1];
    for (let j = 1; j <= i; j++) {
      row.push(row[j-1] * (i - j + 1) / j);
    }
    ans.push(row);
  }

  return ans;
};