📜  帕斯卡的三角形

📅  最后修改于: 2021-04-30 02:33:08             🧑  作者: Mango

帕斯卡的三角形是二项式系数的三角形阵列。编写一个函数,该函数将整数n作为输入并打印Pascal三角形的前n行。以下是帕斯卡三角形的前6行。

1  
1 1 
1 2 1 
1 3 3 1 
1 4 6 4 1 
1 5 10 10 5 1 

方法1(O(n ^ 3)时间复杂度)
每行中的条目数等于行号。例如,第一行具有“ 1”,第二行具有“ 1 1”,第三行具有“ 1 2 1”,等等。一行中的每个条目都是二项式系数的值。行号line中的i个条目的值为C(line,i) 。可以使用以下公式计算该值。

C(line, i)   = line! / ( (line-i)! * i! ) 

一种简单的方法是运行两个循环并计算内部循环中的二项式系数的值。

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


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


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


输出 :

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 

该方法的时间复杂度为O(n ^ 3)。以下是优化的方法。
方法2(O(n ^ 2)时间和O(n ^ 2)额外空间)
如果我们更靠近三角形,则会观察到每个条目都是其上方两个值的总和。因此,我们可以创建一个2D数组来存储先前生成的值。要在一行中生成一个值,我们可以使用数组中先前存储的值。

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


Java脚本


输出:

1 
1 1 
1 2 1 
1 3 3 1 
1 4 6 4 1 

可以优化此方法以使用O(n)额外空间,因为我们仅需要上一行的值。因此,我们可以创建大小为n的辅助数组并覆盖值。以下是另一种仅使用O(1)额外空间的方法。
方法3(O(n ^ 2)时间和O(1)额外空间)
这种方法是用C(基于方法1,我们知道,在行号号项是二项式系数C(行i)和所有的线,值1的想法是计算C开始(线,I)线,i-1) 。可以使用以下公式在O(1)时间中进行计算。

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


Java脚本


输出:

1 
1 1 
1 2 1 
1 3 3 1 
1 4 6 4 1 

因此,方法3是所有方法中最好的方法,但是对于较大的n值,它可能会导致整数溢出,因为它会将两个整数相乘以获得值。