找到帕斯卡三角形的第 n 行

原文:https://www . geeksforgeeks . org/find-the-n-row-in-Pascal-triangle/

给定一个非负整数 N ,任务是找到帕斯卡三角N

注:行索引从 0 开始。

帕斯卡的三角形: 【1】 1 3 3 3 1 1 4 6 4 4 4 1

示例:

输入: N = 3 输出: 1、3、3、1 说明: 3rd行的元素为 1 3 3 1。

输入:N = 0 T3】输出: 1

天真方法: 解决问题最简单的方法就是用递归。先用递归找到前一个索引的行,然后借助前一行计算当前行的值。重复此过程直到第 N行。

下面是上述方法的实现:

C++

// C++ program to find the Nth
// index row in Pascal's triangle
#include <bits/stdc++.h>
using namespace std;

// Function to find the elements
// of rowIndex in Pascal's Triangle
vector<int> getRow(int rowIndex)
{
    vector<int> currow;

    // 1st element of every row is 1
    currow.push_back(1);

    // Check if the row that has to
    // be returned is the first row
    if (rowIndex == 0)
    {
        return currow;
    }

    // Generate the previous row
    vector<int> prev = getRow(rowIndex - 1);

    for(int i = 1; i < prev.size(); i++)
    {

        // Generate the elements
        // of the current row
        // by the help of the
        // previous row
        int curr = prev[i - 1] + prev[i];
        currow.push_back(curr);
    }
    currow.push_back(1);

    // Return the row
    return currow;
}

// Driver Code   
int main()
{
    int n = 3;
    vector<int> arr = getRow(n);

    for(int i = 0; i < arr.size(); i++)
    {
        if (i == arr.size() - 1)
            cout << arr[i];
        else
            cout << arr[i] << ", ";
    }
    return 0;
}

// This code is contributed by divyesh072019

Java 语言(一种计算机语言,尤用于创建网站)

// Java Program to find the Nth
// index row in Pascal's triangle
import java.util.ArrayList;
public class geeks {

    // Function to find the elements
    // of rowIndex in Pascal's Triangle
    public static ArrayList<Integer> getRow(
        int rowIndex)
    {
        ArrayList<Integer> currow
            = new ArrayList<Integer>();
        // 1st element of every row is 1
        currow.add(1);

        // Check if the row that has to
        // be returned is the first row
        if (rowIndex == 0) {
            return currow;
        }
        // Generate the previous row
        ArrayList<Integer> prev = getRow(rowIndex
                                         - 1);

        for (int i = 1; i < prev.size(); i++) {
            // Generate the elements
            // of the current row
            // by the help of the
            // previous row
            int curr = prev.get(i - 1)
                       + prev.get(i);
            currow.add(curr);
        }
        currow.add(1);

        // Return the row
        return currow;
    }

    // Driver Program
    public static void main(String[] args)
    {
        int n = 3;
        ArrayList<Integer> arr = getRow(n);

        for (int i = 0; i < arr.size(); i++) {
            if (i == arr.size() - 1)
                System.out.print(arr.get(i));
            else
                System.out.print(arr.get(i)
                                 + ", ");
        }
    }
}

Python 3

# Python3 program to find the Nth
# index row in Pascal's triangle

# Function to find the elements
# of rowIndex in Pascal's Triangle
def getRow(rowIndex) :

    currow = []

    # 1st element of every row is 1
    currow.append(1)

    # Check if the row that has to
    # be returned is the first row
    if (rowIndex == 0) :

        return currow

    # Generate the previous row
    prev = getRow(rowIndex - 1)

    for i in range(1, len(prev)) :

        # Generate the elements
        # of the current row
        # by the help of the
        # previous row
        curr = prev[i - 1] + prev[i]
        currow.append(curr)

    currow.append(1)

    # Return the row
    return currow

n = 3
arr = getRow(n)

for i in range(len(arr)) :

    if (i == (len(arr) - 1)) :
        print(arr[i])
    else :
        print(arr[i] , end = ", ")

# This code is contributed by divyeshrabadiya07

C

// C# program to find the Nth
// index row in Pascal's triangle
using System;
using System.Collections.Generic;

class GFG{

// Function to find the elements
// of rowIndex in Pascal's Triangle
public static List<int> getRow(int rowIndex)
{
    List<int> currow = new List<int>();

    // 1st element of every row is 1
    currow.Add(1);

    // Check if the row that has to
    // be returned is the first row
    if (rowIndex == 0)
    {
        return currow;
    }
    // Generate the previous row
    List<int> prev = getRow(rowIndex - 1);

    for(int i = 1; i < prev.Count; i++)
    {

        // Generate the elements
        // of the current row
        // by the help of the
        // previous row
        int curr = prev[i - 1] + prev[i];
        currow.Add(curr);
    }
    currow.Add(1);

    // Return the row
    return currow;
}

// Driver code
public static void Main(String[] args)
{
    int n = 3;
    List<int> arr = getRow(n);

    for(int i = 0; i < arr.Count; i++)
    {
        if (i == arr.Count - 1)
            Console.Write(arr[i]);
        else
            Console.Write(arr[i] + ", ");
    }
}
}

// This code is contributed by 29AjayKumar

java 描述语言

<script>

    // Javascript program to find the Nth
    // index row in Pascal's triangle

    // Function to find the elements
    // of rowIndex in Pascal's Triangle
    function getRow(rowIndex)
    {
        let currow = [];

        // 1st element of every row is 1
        currow.push(1);

        // Check if the row that has to
        // be returned is the first row
        if (rowIndex == 0)
        {
            return currow;
        }
        // Generate the previous row
        let prev = getRow(rowIndex - 1);

        for(let i = 1; i < prev.length; i++)
        {

            // Generate the elements
            // of the current row
            // by the help of the
            // previous row
            let curr = prev[i - 1] + prev[i];
            currow.push(curr);
        }
        currow.push(1);

        // Return the row
        return currow;
    }

    let n = 3;
    let arr = getRow(n);

    for(let i = 0; i < arr.length; i++)
    {
        if (i == arr.length - 1)
            document.write(arr[i]);
        else
            document.write(arr[i] + ", ");
    }

</script>

Output: 

1, 3, 3, 1

高效方法: 按照以下步骤优化上述方法:

  • 与上面的方法不同,我们将只生成第 N行的数字。
  • 我们可以观察到帕斯卡三角形的第N行由以下序列组成:
<sub>NC0, NC1, ......, NCN - 1, NCN</sub>
  • 由于, N C 0 = 1 ,序列的以下值可以通过以下等式生成:
<sub>NCr = (NCr - 1 * (N - r + 1)) / r</sub> where 1 ≤ r ≤ N

下面是上述方法的实现:

C++

// C++ program to implement
// the above approach
#include <bits/stdc++.h>
using namespace std;

// Print the N-th row of the
// Pascal's Triangle
void generateNthrow(int N)
{
    // nC0 = 1
    int prev = 1;
    cout << prev;

    for (int i = 1; i <= N; i++) {
        // nCr = (nCr-1 * (n - r + 1))/r
        int curr = (prev * (N - i + 1)) / i;
        cout << ", " << curr;
        prev = curr;
    }
}

// Driver Program
int main()
{

    int N = 5;
    generateNthrow(N);
    return 0;
}

Java 语言(一种计算机语言,尤用于创建网站)

// Java program to implement the above approach
import java.io.*;

class GFG{

// Print the N-th row of the
// Pascal's Triangle
static void generateNthrow(int N)
{

    // nC0 = 1
    int prev = 1;
    System.out.print(prev);

    for(int i = 1; i <= N; i++)
    {

       // nCr = (nCr-1 * (n - r + 1))/r
       int curr = (prev * (N - i + 1)) / i;
       System.out.print(", " + curr);
       prev = curr;
    }
}

// Driver code
public static void main (String[] args)
{
    int N = 5;
    generateNthrow(N);
}
}

// This code is contributed by shubhamsingh10

Python 3

# Python3 program to implement the above approach

# Print the N-th row of the
# Pascal's Triangle
def generateNthRow (N):

    # nC0 = 1
    prev = 1
    print(prev, end = '')

    for i in range(1, N + 1):

        # nCr = (nCr-1 * (n - r + 1))/r
        curr = (prev * (N - i + 1)) // i
        print(",", curr, end = '')
        prev = curr

# Driver code
N = 5

# Function calling
generateNthRow(N)

# This code is contributed by himanshu77

C

// C# program to implement the above approach
using System;
using System.Collections.Generic;
class GFG{

// Print the N-th row of the
// Pascal's Triangle
static void generateNthrow(int N)
{

    // nC0 = 1
    int prev = 1;
    Console.Write(prev);

    for(int i = 1; i <= N; i++)
    {

        // nCr = (nCr-1 * (n - r + 1))/r
        int curr = (prev * (N - i + 1)) / i;
        Console.Write(", " + curr);
        prev = curr;
    }
}

// Driver code
public static void Main(String[] args)
{
    int N = 5;
    generateNthrow(N);
}
}

// This code is contributed by 29AjayKumar

java 描述语言

<script>
    // Javascript program to implement the above approach

    // Print the N-th row of the
    // Pascal's Triangle
    function generateNthrow(N)
    {

        // nC0 = 1
        let prev = 1;
        document.write(prev);

        for(let i = 1; i <= N; i++)
        {

            // nCr = (nCr-1 * (n - r + 1))/r
            let curr = (prev * (N - i + 1)) / i;
            document.write(", " + curr);
            prev = curr;
        }
    }

    let N = 5;
    generateNthrow(N);

// This code is contributed by suresh07.
</script>

Output: 

1, 5, 10, 10, 5, 1

时间复杂度: O(N) 辅助空间: O(1)