Add Pascal's triangle in JavaScript
parent
73a79fd221
commit
decf15be9f
|
@ -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();
|
||||
});
|
||||
}
|
Loading…
Reference in New Issue