# Pascal’s Triangle

• Difficulty Level : Medium
• Last Updated : 21 Jun, 2022

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 ```

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 ith 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++

 `//  C++ code for Pascal's Triangle``#include ``using` `namespace` `std;`` ` `// See https://www.geeksforgeeks.org/space-and-time-efficient-binomial-coefficient/ ``// for details of this function``int` `binomialCoeff(``int` `n, ``int` `k);`` ` `// Function to print first``// n lines of Pascal's ``// Triangle``void` `printPascal(``int` `n)``{``    ``// Iterate through every line and``    ``// print entries in it``    ``for` `(``int` `line = 0; line < n; line++)``    ``{``        ``// Every line has number of ``        ``// integers equal to line ``        ``// number``        ``for` `(``int` `i = 0; i <= line; i++)``            ``cout <<``" "``<< binomialCoeff(line, i);``        ``cout <<``"\n"``;``    ``}``}`` ` `// See https://www.geeksforgeeks.org/space-and-time-efficient-binomial-coefficient/``// for details of this function``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;``}`` ` `// Driver program ``int` `main()``{``    ``int` `n = 7;``    ``printPascal(n);``    ``return` `0;``}`` ` `// This code is contributed by shivanisinghss2110`

## C

 `//  C++ code for Pascal's Triangle``#include `` ` `// See https://www.geeksforgeeks.org/space-and-time-efficient-binomial-coefficient/ ``// for details of this function``int` `binomialCoeff(``int` `n, ``int` `k);`` ` `// Function to print first``// n lines of Pascal's ``// Triangle``void` `printPascal(``int` `n)``{``    ``// Iterate through every line and``    ``// print entries in it``    ``for` `(``int` `line = 0; line < n; line++)``    ``{``        ``// Every line has number of ``        ``// integers equal to line ``        ``// number``        ``for` `(``int` `i = 0; i <= line; i++)``            ``printf``(``"%d "``,``                    ``binomialCoeff(line, i));``        ``printf``(``"\n"``);``    ``}``}`` ` `// See https://www.geeksforgeeks.org/space-and-time-efficient-binomial-coefficient/``// for details of this function``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;``}`` ` `// Driver program ``int` `main()``{``    ``int` `n = 7;``    ``printPascal(n);``    ``return` `0;``}`

## Java

 `// Java code for Pascal's Triangle``import` `java.io.*;`` ` `class` `GFG {``     ` `    ``// Function to print first``    ``// n lines of Pascal's Triangle``    ``static` `void` `printPascal(``int` `n)``    ``{``         ` `    ``// Iterate through every line``    ``// and print entries in it``    ``for` `(``int` `line = ``0``; line < n; line++)``    ``{``        ``// Every line has number of ``        ``// integers equal to line number``        ``for` `(``int` `i = ``0``; i <= line; i++)``        ``System.out.print(binomialCoeff``                        ``(line, i)+``" "``);``                         ` `        ``System.out.println();``    ``}``    ``}``     ` `    ``// Link for details of this function``    ``// https://www.geeksforgeeks.org/space-and-time-efficient-binomial-coefficient/``    ``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;``    ``}``     ` `    ``// Driver code``    ``public` `static` `void` `main(String args[])``    ``{``    ``int` `n = ``7``;``    ``printPascal(n);``    ``}``}`` ` `/*This code is contributed by Nikita Tiwari.*/`

## Python3

 `# Python 3 code for Pascal's Triangle``# A simple O(n^3) ``# program for ``# Pascal's Triangle`` ` `# Function to print ``# first n lines of``# Pascal's Triangle``def` `printPascal(n) :``     ` `    ``# Iterate through every line ``    ``# and print entries in it``    ``for` `line ``in` `range``(``0``, n) :``         ` `        ``# Every line has number of ``        ``# integers equal to line``        ``# number``        ``for` `i ``in` `range``(``0``, line ``+` `1``) :``            ``print``(binomialCoeff(line, i),``                ``" "``, end ``=` `"")``        ``print``()``     ` ` ` `# See https://www.geeksforgeeks.org/space-and-time-efficient-binomial-coefficient/``# for details of this function``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`` ` `# Driver program``n ``=` `7``printPascal(n)`` ` ` ` `# This code is contributed by Nikita Tiwari.`

## C#

 `// C# code for Pascal's Triangle``using` `System;`` ` `class` `GFG {``     ` `    ``// Function to print first``    ``// n lines of Pascal's Triangle``    ``static` `void` `printPascal(``int` `n)``    ``{``         ` `    ``// Iterate through every line``    ``// and print entries in it``    ``for` `(``int` `line = 0; line < n; line++)``    ``{``        ``// Every line has number of ``        ``// integers equal to line number``        ``for` `(``int` `i = 0; i <= line; i++)``        ``Console.Write(binomialCoeff``                        ``(line, i)+``" "``);``                         ` `        ``Console.WriteLine();``    ``}``    ``}``     ` `    ``// Link for details of this function``    ``// https://www.geeksforgeeks.org/space-and-time-efficient-binomial-coefficient/``    ``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;``    ``}``     ` `    ``// Driver code``    ``public` `static` `void` `Main()``    ``{``    ``int` `n = 7;``    ``printPascal(n);``    ``}``}`` ` `/*This code is contributed by vt_m.*/`

## PHP

 ` ``\$n` `- ``\$k``)``    ``\$k` `= ``\$n` `- ``\$k``;``    ``for` `(``\$i` `= 0; ``\$i` `< ``\$k``; ++``\$i``)``    ``{``        ``\$res` `*= (``\$n` `- ``\$i``);``        ``\$res` `/= (``\$i` `+ 1);``    ``}``return` `\$res``;``}`` ` `// Function to print first``// n lines of Pascal's ``// Triangle``function` `printPascal(``\$n``)``{``    ``// Iterate through every line and``    ``// print entries in it``    ``for` `(``\$line` `= 0; ``\$line` `< ``\$n``; ``\$line``++)``    ``{``        ``// Every line has number of ``        ``// integers equal to line ``        ``// number``        ``for` `(``\$i` `= 0; ``\$i` `<= ``\$line``; ``\$i``++)``                ``echo` `""``.binomialCoeff(``\$line``, ``\$i``).``" "``;``                 ` `        ``echo` `"\n"``;``    ``}``}`` ` `// Driver Code``\$n``=7;``printPascal(``\$n``);`` ` `// This code is contributed by Mithun Kumar``?>`

## Javascript

 ``

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++

 `// C++ program for Pascalâ€™s Triangle``// A O(n^2) time and O(n^2) extra space ``// method for Pascal's Triangle``#include ``using` `namespace` `std;`` ` `void` `printPascal(``int` `n)``{``     ` `    ``// An auxiliary array to store ``    ``// generated pascal triangle values``    ``int` `arr[n][n]; `` ` `    ``// Iterate through every line and ``    ``// print integer(s) in it``    ``for` `(``int` `line = 0; line < n; line++)``    ``{``        ``// Every line has number of integers ``        ``// equal to line number``        ``for` `(``int` `i = 0; i <= line; i++)``        ``{``        ``// First and last values in every row are 1``        ``if` `(line == i || i == 0)``            ``arr[line][i] = 1;``        ``// Other values are sum of values just ``        ``// above and left of above``        ``else``            ``arr[line][i] = arr[line - 1][i - 1] + ``                            ``arr[line - 1][i];``        ``cout << arr[line][i] << ``" "``;``        ``}``        ``cout << ``"\n"``;``    ``}``}`` ` `// Driver code``int` `main()``{``    ``int` `n = 5;``    ``printPascal(n);``    ``return` `0;``}`` ` `// This code is Contributed by Code_Mech.`

## C

 `// C program for Pascalâ€™s Triangle``// A O(n^2) time and O(n^2) extra space ``// method for Pascal's Triangle``void` `printPascal(``int` `n)``{``// An auxiliary array to store ``// generated pascal triangle values``int` `arr[n][n]; `` ` `// Iterate through every line and print integer(s) in it``for` `(``int` `line = 0; line < n; line++)``{``    ``// Every line has number of integers ``    ``// equal to line number``    ``for` `(``int` `i = 0; i <= line; i++)``    ``{``    ``// First and last values in every row are 1``    ``if` `(line == i || i == 0)``        ``arr[line][i] = 1;``    ``// Other values are sum of values just ``    ``// above and left of above``    ``else` `        ``arr[line][i] = arr[line-1][i-1] + arr[line-1][i];``    ``printf``(``"%d "``, arr[line][i]);``    ``}``    ``printf``(``"\n"``);``}``}``// Driver code``int` `main()``{``int` `n = 5;``    ``printPascal(n);``    ``return` `0;``}`

## Java

 `// java program for Pascal's Triangle``// A O(n^2) time and O(n^2) extra ``// space method for Pascal's Triangle``import` `java.io.*;`` ` `class` `GFG {``    ``public` `static` `void` `main (String[] args) {``        ``int` `n = ``5``;``        ``printPascal(n);``    ``}`` ` `public` `static` `void` `printPascal(``int` `n)``{``// An auxiliary array to store generated pascal triangle values``int``[][] arr = ``new` `int``[n][n]; `` ` `// Iterate through every line and print integer(s) in it``for` `(``int` `line = ``0``; line < n; line++)``{``    ``// Every line has number of integers equal to line number``    ``for` `(``int` `i = ``0``; i <= line; i++)``    ``{``    ``// First and last values in every row are 1``    ``if` `(line == i || i == ``0``)``        ``arr[line][i] = ``1``;``    ``else` `// Other values are sum of values just above and left of above``        ``arr[line][i] = arr[line-``1``][i-``1``] + arr[line-``1``][i];``    ``System.out.print(arr[line][i]);``    ``}``    ``System.out.println(``""``);``}``}``}`

## Python3

 `# Python3 program for Pascal's Triangle`` ` `# A O(n^2) time and O(n^2) extra ``# space method for Pascal's Triangle``def` `printPascal(n:``int``):`` ` `    ``# An auxiliary array to store ``    ``# generated pascal triangle values``    ``arr ``=` `[[``0` `for` `x ``in` `range``(n)] ``              ``for` `y ``in` `range``(n)] `` ` `    ``# Iterate through every line``    ``# and print integer(s) in it``    ``for` `line ``in` `range` `(``0``, n):`` ` `        ``# Every line has number of ``        ``# integers equal to line number``        ``for` `i ``in` `range` `(``0``, line ``+` `1``):`` ` `            ``# First and last values ``            ``# in every row are 1``            ``if``(i ``is` `0` `or` `i ``is` `line):``                ``arr[line][i] ``=` `1``                ``print``(arr[line][i], end ``=` `" "``) `` ` `            ``# Other values are sum of values``            ``# just above and left of above ``            ``else``:``                ``arr[line][i] ``=` `(arr[line ``-` `1``][i ``-` `1``] ``+` `                                ``arr[line ``-` `1``][i])``                ``print``(arr[line][i], end ``=` `" "``)             ``        ``print``(``"\n"``, end ``=` `"")`` ` `# Driver Code``n ``=` `5``printPascal(n)`` ` `# This code is contributed ``# by Sanju Maderna`

## C#

 `// C# program for Pascal's Triangle``// A O(n^2) time and O(n^2) extra ``// space method for Pascal's Triangle``using` `System;`` ` `class` `GFG ``{``public` `static` `void` `printPascal(``int` `n)``{``     ` `// An auxiliary array to store ``// generated pascal triangle values``int``[,] arr = ``new` `int``[n, n]; `` ` `// Iterate through every line``// and print integer(s) in it``for` `(``int` `line = 0; line < n; line++)``{``    ``// Every line has number of ``    ``// integers equal to line number``    ``for` `(``int` `i = 0; i <= line; i++)``    ``{``         ` `    ``// First and last values ``    ``// in every row are 1``    ``if` `(line == i || i == 0)``        ``arr[line, i] = 1;``    ``else` `// Other values are sum of values``         ``// just above and left of above``        ``arr[line, i] = arr[line - 1, i - 1] + ``                       ``arr[line - 1, i];``    ``Console.Write(arr[line, i]);``    ``}``Console.WriteLine(``""``);``}``}`` ` `// Driver Code``public` `static` `void` `Main () ``{``    ``int` `n = 5;``    ``printPascal(n);``}``}`` ` `// This code is contributed ``// by Akanksha Rai(Abby_akku)`

## PHP

 ``

## Javascript

 ``

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 ith 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++

 `// C++ program for Pascalâ€™s Triangle``// A O(n^2) time and O(1) extra space ``// function for Pascal's Triangle``#include `` ` `using` `namespace` `std;``void` `printPascal(``int` `n)``{``     ` `for` `(``int` `line = 1; line <= n; line++)``{``    ``int` `C = 1; ``// used to represent C(line, i)``    ``for` `(``int` `i = 1; i <= line; i++) ``    ``{``         ` `        ``// The first value in a line is always 1``        ``cout<< C<<``" "``; ``        ``C = C * (line - i) / i; ``    ``}``    ``cout<<``"\n"``;``}``}`` ` `// Driver code``int` `main()``{``    ``int` `n = 5;``    ``printPascal(n);``    ``return` `0;``}`` ` `// This code is contributed by Code_Mech`

## C

 `// C program for Pascalâ€™s Triangle``// A O(n^2) time and O(1) extra space ``// function for Pascal's Triangle``void` `printPascal(``int` `n)``{``for` `(``int` `line = 1; line <= n; line++)``{``    ``int` `C = 1; ``// used to represent C(line, i)``    ``for` `(``int` `i = 1; i <= line; i++) ``    ``{``    ``printf``(``"%d "``, C); ``// The first value in a line is always 1``    ``C = C * (line - i) / i; ``    ``}``    ``printf``(``"\n"``);``}``}``// Driver code``int` `main()``{``int` `n = 5;``    ``printPascal(n);``    ``return` `0;``}`

## Java

 `// Java program for Pascal's Triangle``// A O(n^2) time and O(1) extra ``// space method for Pascal's Triangle``import` `java.io.*;``class` `GFG {`` ` `//Pascal function ``public` `static` `void` `printPascal(``int` `n)``{``    ``for``(``int` `line = ``1``; line <= n; line++)``    ``{``         ` `    ``int` `C=``1``;``// used to represent C(line, i)``    ``for``(``int` `i = ``1``; i <= line; i++)``    ``{ ``        ``// The first value in a line is always 1``        ``System.out.print(C+``" "``);``        ``C = C * (line - i) / i; ``    ``}``    ``System.out.println();``    ``}``}`` ` `// Driver code``public` `static` `void` `main (String[] args) {``    ``int` `n = ``5``;``    ``printPascal(n);``} ``}``// This code is contributed ``// by Archit Puri`

## Python3

 `# Python3 program for Pascal's Triangle ``# A O(n^2) time and O(1) extra ``# space method for Pascal's Triangle `` ` `# Pascal function ``def` `printPascal(n): `` ` `    ``for` `line ``in` `range``(``1``, n ``+` `1``): ``        ``C ``=` `1``; ``# used to represent C(line, i) ``        ``for` `i ``in` `range``(``1``, line ``+` `1``): ``             ` `            ``# The first value in a ``            ``# line is always 1 ``            ``print``(C, end ``=` `" "``); ``            ``C ``=` `int``(C ``*` `(line ``-` `i) ``/` `i); ``        ``print``(""); `` ` `# Driver code ``n ``=` `5``; ``printPascal(n);`` ` `# This code is contributed by mits`

## C#

 `// C# program for Pascal's Triangle ``// A O(n^2) time and O(1) extra ``// space method for Pascal's Triangle ``using` `System;``class` `GFG ``{ `` ` `// Pascal function ``public` `static` `void` `printPascal(``int` `n) ``{ ``    ``for``(``int` `line = 1; ``            ``line <= n; line++) ``    ``{ ``         ` `    ``int` `C = 1;``// used to represent C(line, i) ``    ``for``(``int` `i = 1; i <= line; i++) ``    ``{ ``        ``// The first value in a``        ``// line is always 1 ``        ``Console.Write(C + ``" "``); ``        ``C = C * (line - i) / i; ``    ``} ``    ``Console.Write(``"\n"``) ;``    ``} ``} `` ` `// Driver code ``public` `static` `void` `Main ()``{ ``    ``int` `n = 5; ``    ``printPascal(n); ``} ``} `` ` `// This code is contributed``// by ChitraNayal`

## PHP

 ``

## Javascript

 ``

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.