给定一个非负整数N ,任务是找到帕斯卡三角形的第N行。
注意:行索引从0开始。
Pascal’s Triangle:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
例子:
Input: N = 3
Output: 1, 3, 3, 1
Explanation:
The elements in the 3rd row are 1 3 3 1.
Input: N = 0
Output: 1
天真的方法:
解决问题的最简单方法是使用递归。首先使用递归查找上一个索引的行,然后在上一个索引的帮助下计算当前行的值。重复此过程,直至第N列。
下面是上述方法的实现:
C++
// C++ program to find the Nth
// index row in Pascal's triangle
#include
using namespace std;
// Function to find the elements
// of rowIndex in Pascal's Triangle
vector getRow(int rowIndex)
{
vector 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 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 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 getRow(
int rowIndex)
{
ArrayList currow
= new ArrayList();
// 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 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 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)
+ ", ");
}
}
}
Python3
# 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 getRow(int rowIndex)
{
List currow = new List();
// 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 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 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
Javascript
C++
// C++ program to implement
// the above approach
#include
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
Python3
# 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
输出:
1, 3, 3, 1
高效方法:
请按照以下步骤优化上述方法:
- 不同于上述方法,我们将只产生唯一的N个的数量第i行。
- 我们可以观察到帕斯卡三角形的第N行由以下序列组成:
NC0, NC1, ......, NCN - 1, NCN
- 由于N C 0 = 1 ,因此可以通过以下等式生成序列的以下值:
NCr = (NCr - 1 * (N - r + 1)) / r where 1 ≤ r ≤ N
下面是上述方法的实现:
C++
// C++ program to implement
// the above approach
#include
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
Python3
# 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
输出:
1, 5, 10, 10, 5, 1
时间复杂度: O(N)
辅助空间: O(1)