Add Pascal's triangle in JavaScript

pull/1113/head
Kevin Yu 2022-12-21 21:05:43 -08:00
parent 73a79fd221
commit decf15be9f
1 changed files with 96 additions and 0 deletions

View File

@ -0,0 +1,96 @@
/*
Problem -
Given an integer (numRows), return the first numRows of Pascal's triangle.
Pascal's triangle - each number is the sum of the two numbers directly above it
Example -
Input: n = 5
Output: [[1], [1, 1], [1, 2, 1], [1, 3, 3, 1], [1, 4, 6, 4, 1]]
Visualization:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
Time Complexity - O(n^2) n = number of rows
Space Complexity - O(1) excluding the result array
*/
init();
function getPascalsTriangle(numRows) {
// Base case: the tip of Pascal's triangle always starts with 1
const pasTri = [[1]];
// Start looping through the next row of Pascal's triangle until we reach the end
for(let i = 1; i < numRows; i++) {
// Initialize the next row of Pascal's triangle
const nextRow = [];
// Builds the next row of Pascal's triangle
for(let j = 0; j <= i; j++) {
// Gets the upper left and right values from the previous row
// If the upper left or right values doesn't exist, use 0 instead
const firstVal = pasTri[i - 1][j - 1] || 0;
const secVal = pasTri[i - 1][j] || 0;
// Push the new combined value to the current row of Pascal's triangle
nextRow.push(firstVal + secVal);
}
// Add the next row to our original Pascal's triangle
pasTri.push(nextRow);
}
return pasTri;
}
function testPascalsTriangle(numRows) {
const pascalTriangle = getPascalsTriangle(numRows);
console.log("Number of rows: ", numRows);
printTriangle(pascalTriangle);
console.log("Test complete!");
}
function printTriangle(pascalTriangle) {
const SPACE = " ";
for (let row = 0; row < pascalTriangle.length; row++) {
const leadingSpace = SPACE.repeat(pascalTriangle.length - row - 1);
const currentRowInTriangle = pascalTriangle[row].join(SPACE);
console.log(leadingSpace + currentRowInTriangle);
}
}
function init() {
const readline = require('readline').createInterface({
input: process.stdin,
output: process.stdout
});
readline.question('Please enter the number of rows to print\n', numRows => {
if (numRows >= 1) {
testPascalsTriangle(numRows);
} else {
console.log("Please enter a valid number!");
}
readline.close();
});
}