Pascal's Triangle Little Mathematics Library Pdf
Pascal's triangle is a triangular array of the binomial coefficients. Write a function that takes an integer value n as input and prints first n lines of the Pascal's triangle. Following are the first 6 rows of Pascal's Triangle.
1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1
Become a success story instead of just reading about them. Prepare for coding interviews at Amazon and other top product-based companies with our Amazon Test Series. Includes topic-wise practice questions on all important DSA topics along with 10 practice contests of 2 hours each. Designed by industry experts that will surely help you practice and sharpen your programming skills. Wait no more, start your preparation today!
Method 1 ( O(n^3) time complexity )
Number of entries in every line is equal to line number. For example, the first line has "1", the second line has "1 1", the third line has "1 2 1",.. and so on. Every entry in a line is value of a Binomial Coefficient. The value of i th entry in line number line is C(line, i). The value can be calculated using following formula.
C(line, i) = line! / ( (line-i)! * i! )
A simple method is to run two loops and calculate the value of Binomial Coefficient in inner loop.
C++
#include <iostream>
using namespace std;
int binomialCoeff( int n, int k);
void printPascal( int n)
{
for ( int line = 0; line < n; line++)
{
for ( int i = 0; i <= line; i++)
cout << " " << binomialCoeff(line, i);
cout << "\n" ;
}
}
int binomialCoeff( int n, int k)
{
int res = 1;
if (k > n - k)
k = n - k;
for ( int i = 0; i < k; ++i)
{
res *= (n - i);
res /= (i + 1);
}
return res;
}
int main()
{
int n = 7;
printPascal(n);
return 0;
}
C
#include <stdio.h>
int binomialCoeff( int n, int k);
void printPascal( int n)
{
for ( int line = 0; line < n; line++)
{
for ( int i = 0; i <= line; i++)
printf ( "%d " ,
binomialCoeff(line, i));
printf ( "\n" );
}
}
int binomialCoeff( int n, int k)
{
int res = 1;
if (k > n - k)
k = n - k;
for ( int i = 0; i < k; ++i)
{
res *= (n - i);
res /= (i + 1);
}
return res;
}
int main()
{
int n = 7;
printPascal(n);
return 0;
}
Java
import java.io.*;
class GFG {
static void printPascal( int n)
{
for ( int line = 0 ; line < n; line++)
{
for ( int i = 0 ; i <= line; i++)
System.out.print(binomialCoeff
(line, i)+ " " );
System.out.println();
}
}
static int binomialCoeff( int n, int k)
{
int res = 1 ;
if (k > n - k)
k = n - k;
for ( int i = 0 ; i < k; ++i)
{
res *= (n - i);
res /= (i + 1 );
}
return res;
}
public static void main(String args[])
{
int n = 7 ;
printPascal(n);
}
}
Python3
def printPascal(n) :
for line in range ( 0 , n) :
for i in range ( 0 , line + 1 ) :
print (binomialCoeff(line, i),
" " , end = "")
print ()
def binomialCoeff(n, k) :
res = 1
if (k > n - k) :
k = n - k
for i in range ( 0 , k) :
res = res * (n - i)
res = res / / (i + 1 )
return res
n = 7
printPascal(n)
C#
using System;
class GFG {
static void printPascal( int n)
{
for ( int line = 0; line < n; line++)
{
for ( int i = 0; i <= line; i++)
Console.Write(binomialCoeff
(line, i)+ " " );
Console.WriteLine();
}
}
static int binomialCoeff( int n, int k)
{
int res = 1;
if (k > n - k)
k = n - k;
for ( int i = 0; i < k; ++i)
{
res *= (n - i);
res /= (i + 1);
}
return res;
}
public static void Main()
{
int n = 7;
printPascal(n);
}
}
PHP
<?php
function binomialCoeff( $n , $k )
{
$res = 1;
if ( $k > $n - $k )
$k = $n - $k ;
for ( $i = 0; $i < $k ; ++ $i )
{
$res *= ( $n - $i );
$res /= ( $i + 1);
}
return $res ;
}
function printPascal( $n )
{
for ( $line = 0; $line < $n ; $line ++)
{
for ( $i = 0; $i <= $line ; $i ++)
echo "" .binomialCoeff( $line , $i ). " " ;
echo "\n" ;
}
}
$n =7;
printPascal( $n );
?>
Javascript
<script>
function printPascal(n)
{
for (let line = 0; line < n; line++)
{
for (let i = 0; i <= line; i++)
document.write(binomialCoeff
(line, i)+ " " );
document.write( "<br />" );
}
}
function binomialCoeff(n, k)
{
let res = 1;
if (k > n - k)
k = n - k;
for (let i = 0; i < k; ++i)
{
res *= (n - i);
res /= (i + 1);
}
return res;
}
let n = 7;
printPascal(n);
</script>
Output :
1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1 6 15 20 15 6 1
Auxiliary Space: O(1)
Time complexity of this method is O(n^3). Following are optimized methods.
Method 2( O(n^2) time and O(n^2) extra space )
If we take a closer at the triangle, we observe that every entry is sum of the two values above it. So we can create a 2D array that stores previously generated values. To generate a value in a line, we can use the previously stored values from array.
C++
#include <bits/stdc++.h>
using namespace std;
void printPascal( int n)
{
int arr[n][n];
for ( int line = 0; line < n; line++)
{
for ( int i = 0; i <= line; i++)
{
if (line == i || i == 0)
arr[line][i] = 1;
else
arr[line][i] = arr[line - 1][i - 1] +
arr[line - 1][i];
cout << arr[line][i] << " " ;
}
cout << "\n" ;
}
}
int main()
{
int n = 5;
printPascal(n);
return 0;
}
C
void printPascal( int n)
{
int arr[n][n];
for ( int line = 0; line < n; line++)
{
for ( int i = 0; i <= line; i++)
{
if (line == i || i == 0)
arr[line][i] = 1;
else
arr[line][i] = arr[line-1][i-1] + arr[line-1][i];
printf ( "%d " , arr[line][i]);
}
printf ( "\n" );
}
}
int main()
{
int n = 5;
printPascal(n);
return 0;
}
Java
import java.io.*;
class GFG {
public static void main (String[] args) {
int n = 5 ;
printPascal(n);
}
public static void printPascal( int n)
{
int [][] arr = new int [n][n];
for ( int line = 0 ; line < n; line++)
{
for ( int i = 0 ; i <= line; i++)
{
if (line == i || i == 0 )
arr[line][i] = 1 ;
else
arr[line][i] = arr[line- 1 ][i- 1 ] + arr[line- 1 ][i];
System.out.print(arr[line][i]);
}
System.out.println( "" );
}
}
}
Python3
def printPascal(n: int ):
arr = [[ 0 for x in range (n)]
for y in range (n)]
for line in range ( 0 , n):
for i in range ( 0 , line + 1 ):
if (i is 0 or i is line):
arr[line][i] = 1
print (arr[line][i], end = " " )
else :
arr[line][i] = (arr[line - 1 ][i - 1 ] +
arr[line - 1 ][i])
print (arr[line][i], end = " " )
print ( "\n" , end = "")
n = 5
printPascal(n)
C#
using System;
class GFG
{
public static void printPascal( int n)
{
int [,] arr = new int [n, n];
for ( int line = 0; line < n; line++)
{
for ( int i = 0; i <= line; i++)
{
if (line == i || i == 0)
arr[line, i] = 1;
else
arr[line, i] = arr[line - 1, i - 1] +
arr[line - 1, i];
Console.Write(arr[line, i]);
}
Console.WriteLine( "" );
}
}
public static void Main ()
{
int n = 5;
printPascal(n);
}
}
PHP
<?php
function printPascal( $n )
{
$arr = array ( array ());
for ( $line = 0; $line < $n ; $line ++)
{
for ( $i = 0; $i <= $line ; $i ++)
{
if ( $line == $i || $i == 0)
$arr [ $line ][ $i ] = 1;
else
$arr [ $line ][ $i ] = $arr [ $line - 1][ $i - 1] +
$arr [ $line - 1][ $i ];
echo $arr [ $line ][ $i ] . " " ;
}
echo "\n" ;
}
}
$n = 5;
printPascal( $n );
?>
Javascript
<script>
var n = 5;
printPascal(n);
function printPascal(n)
{
arr = a = Array(n).fill(0).map(x => Array(n).fill(0));
for (line = 0; line < n; line++)
{
for (i = 0; i <= line; i++)
{
if (line == i || i == 0)
arr[line][i] = 1;
else
arr[line][i] = arr[line-1][i-1] + arr[line-1][i];
document.write(arr[line][i]);
}
document.write( "<br>" );
}
}
</script>
Output:
1 1 1 1 2 1 1 3 3 1 1 4 6 4 1
This method can be optimized to use O(n) extra space as we need values only from previous row. So we can create an auxiliary array of size n and overwrite values. Following is another method uses only O(1) extra space.
Method 3 ( O(n^2) time and O(1) extra space )
This method is based on method 1. We know that i th entry in a line number line is Binomial Coefficient C(line, i) and all lines start with value 1. The idea is to calculate C(line, i) using C(line, i-1). It can be calculated in O(1) time using the following.
C(line, i) = line! / ( (line-i)! * i! ) C(line, i-1) = line! / ( (line - i + 1)! * (i-1)! ) We can derive following expression from above two expressions. C(line, i) = C(line, i-1) * (line - i + 1) / i So C(line, i) can be calculated from C(line, i-1) in O(1) time
C++
#include <bits/stdc++.h>
using namespace std;
void printPascal( int n)
{
for ( int line = 1; line <= n; line++)
{
int C = 1;
for ( int i = 1; i <= line; i++)
{
cout<< C<< " " ;
C = C * (line - i) / i;
}
cout<< "\n" ;
}
}
int main()
{
int n = 5;
printPascal(n);
return 0;
}
C
void printPascal( int n)
{
for ( int line = 1; line <= n; line++)
{
int C = 1;
for ( int i = 1; i <= line; i++)
{
printf ( "%d " , C);
C = C * (line - i) / i;
}
printf ( "\n" );
}
}
int main()
{
int n = 5;
printPascal(n);
return 0;
}
Java
import java.io.*;
class GFG {
public static void printPascal( int n)
{
for ( int line = 1 ; line <= n; line++)
{
int C= 1 ;
for ( int i = 1 ; i <= line; i++)
{
System.out.print(C+ " " );
C = C * (line - i) / i;
}
System.out.println();
}
}
public static void main (String[] args) {
int n = 5 ;
printPascal(n);
}
}
Python3
def printPascal(n):
for line in range ( 1 , n + 1 ):
C = 1 ;
for i in range ( 1 , line + 1 ):
print (C, end = " " );
C = int (C * (line - i) / i);
print ("");
n = 5 ;
printPascal(n);
C#
using System;
class GFG
{
public static void printPascal( int n)
{
for ( int line = 1;
line <= n; line++)
{
int C = 1;
for ( int i = 1; i <= line; i++)
{
Console.Write(C + " " );
C = C * (line - i) / i;
}
Console.Write( "\n" ) ;
}
}
public static void Main ()
{
int n = 5;
printPascal(n);
}
}
PHP
<?php
function printPascal( $n )
{
for ( $line = 1; $line <= $n ; $line ++)
{
$C = 1;
for ( $i = 1; $i <= $line ; $i ++)
{
print ( $C . " " );
$C = $C * ( $line - $i ) / $i ;
}
print ( "\n" );
}
}
$n = 5;
printPascal( $n );
?>
Javascript
<script>
function printPascal(n)
{
for (line = 1; line <= n; line++)
{
var C=1;
for (i = 1; i <= line; i++)
{
document.write(C+ " " );
C = C * (line - i) / i;
}
document.write( "<br>" );
}
}
var n = 5;
printPascal(n);
</script>
Output:
1 1 1 1 2 1 1 3 3 1 1 4 6 4 1
So method 3 is the best method among all, but it may cause integer overflow for large values of n as it multiplies two integers to obtain values.
This article is compiled by Rahul and reviewed by GeeksforGeeks team. Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.
Pascal's Triangle Little Mathematics Library Pdf
Source: https://www.geeksforgeeks.org/pascal-triangle/
Posted by: parmercombou1979.blogspot.com

0 Response to "Pascal's Triangle Little Mathematics Library Pdf"
Post a Comment