DEV Community

Cover image for Making Pascal's Triangle: LeetCode's Challenge & Code Solution
Enzo Enrico
Enzo Enrico

Posted on

Making Pascal's Triangle: LeetCode's Challenge & Code Solution

Problem:
I was wandering Leetcode (like usual) when I came the 118th problem, Pascal's Triangle, creating a Pascal's Triangle only from a single input, the triangle's height.

The code

function generate(numRows: number): number[][] {
  let pascalsTriangle: number[][] = new Array();

  for (let i = 0; i < numRows; i++) {
    let row: number[] = [];

    for (let j = 0; j < i + 1; j++) {
      row.push(fac(i) / (fac(j) * fac(i - j)));
    }

    pascalsTrianglet.push(row);
  }

  return pascalsTriangle;
}

function fac(n: number): number {
  if (n < 0) return -1;
  else if (n == 0) return 1;
  else {
    return n * fac(n - 1);
  }
}
Enter fullscreen mode Exit fullscreen mode

Thought Process:
The first thing I wanted to know was how could I create a Pascal's Triangle without code.

Turns out, that's actually pretty easy, thanks to MathIsFun.com (go check them out!) I could find exactally what I needed to learn all about Pascal's Triangles

I was able to find the formula and a pretty cool illustration to show the logic behind the formula:

Image description
TL;DR: Divide column's factorial by (row's factorial * (column - row)'s factorial)

Altough this formula only get's us one row, we can dynamically change the variables using code, so that's exactally what we're doing!

Code Breakdown:

The main function

function generate(numRows: number): number[][] {
  let pascalsTriangle: number[][] = new Array();

  for (let i = 0; i < numRows; i++) {
    let row: number[] = [];

    for (let j = 0; j < i + 1; j++) {
      row.push(fac(i) / (fac(j) * fac(i - j)));
    }

    pascalsTriangle.push(row);
  }

  return pascalsTriangle;
}
Enter fullscreen mode Exit fullscreen mode

In the code above we start out by creating a 2d array and initializing a for loop for each row of the triangle

let pascalsTriangle: number[][] = new Array();

for (let i = 0; i < numRows; i++) {
  let row: number[] = [];

  for (let j = 0; j < i + 1; j++) {
    row.push(fac(i) / (fac(j) * fac(i - j)));
  }

  pascalsTriangle.push(row);
}
Enter fullscreen mode Exit fullscreen mode

In this first loop, we run another loop for calculating the triangle's i'th row

for (let j = 0; j < i + 1; j++) {
  row.push(fac(i) / (fac(j) * fac(i - j)));
}
Enter fullscreen mode Exit fullscreen mode

Since we dont have a factorial function in JS, we need to write our own!

function fac(n: number): number {
  if (n < 0) return -1;
  else if (n == 0) return 1;
  else {
    return n * fac(n - 1);
  }
}
Enter fullscreen mode Exit fullscreen mode

Finally, we append the row to our triangle and return the pascalsTriangle variable after the first loop

    pascalsTriangle.push(row);
  }

  return pascalsTriangle;
}
Enter fullscreen mode Exit fullscreen mode

And that's it!

Image description
It's definitely not the best or most efficient solution, but I had a lot of fun researching about the topic and learning something new, and I hope you could enjoy this little article!

Thanks for the support! 👋

Sentry image

See why 4M developers consider Sentry, “not bad.”

Fixing code doesn’t have to be the worst part of your day. Learn how Sentry can help.

Learn more

Top comments (0)

Billboard image

Create up to 10 Postgres Databases on Neon's free plan.

If you're starting a new project, Neon has got your databases covered. No credit cards. No trials. No getting in your way.

Try Neon for Free →

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay