Given a convex polygon with n+2 sides. The task is to calculate the number of ways in which triangles can be formed by connecting vertices with non-crossing line segments.
Examples:
Input: n = 1
Output: 1
It is already a triangle so it can only be formed in 1 way.
Input: n = 2
Output: 2
It can be cut into 2 triangles by using either pair of opposite vertices.
The above problem is an application of a catalan numbers. So, the task is to only find the n’th Catalan Number. First few catalan numbers are 1 1 2 5 14 42 132 429 1430 4862, … (considered from 0th number)
Below is the program to find Nth catalan number:
// C++ program to find the // nth catalan number #include <bits/stdc++.h> using namespace std;
// Returns value of Binomial Coefficient C(n, k) unsigned long int binomialCoeff(unsigned int n,
unsigned int k)
{ unsigned long int res = 1;
// Since C(n, k) = C(n, n-k)
if (k > n - k)
k = n - k;
// Calculate value of
// [n*(n-1)*---*(n-k+1)] / [k*(k-1)*---*1]
for ( int i = 0; i < k; ++i) {
res *= (n - i);
res /= (i + 1);
}
return res;
} // A Binomial coefficient based function // to find nth catalan // number in O(n) time unsigned long int catalan(unsigned int n)
{ // Calculate value of 2nCn
unsigned long int c = binomialCoeff(2 * n, n);
// return 2nCn/(n+1)
return c / (n + 1);
} // Driver code int main()
{ int n = 3;
cout << catalan(n) << endl;
return 0;
} |
// Java program to find the // nth catalan number class GFG
{ // Returns value of Binomial // Coefficient C(n, k) static long binomialCoeff( int n,
int k)
{ long res = 1 ;
// Since C(n, k) = C(n, n-k)
if (k > n - k)
k = n - k;
// Calculate value of
// [n*(n-1)*---*(n-k+1)] /
// [k*(k-1)*---*1]
for ( int i = 0 ; i < k; ++i)
{
res *= (n - i);
res /= (i + 1 );
}
return res;
} // A Binomial coefficient // based function to find // nth catalan number in // O(n) time static long catalan( int n)
{ // Calculate value of 2nCn
long c = binomialCoeff( 2 * n, n);
// return 2nCn/(n+1)
return c / (n + 1 );
} // Driver code public static void main(String[] args)
{ int n = 3 ;
System.out.println(catalan(n));
} } // This code is contributed // by Arnab Kundu |
# Python3 program to find the # nth catalan number # Returns value of Binomial # Coefficient C(n, k) def binomialCoeff(n, k):
res = 1 ;
# Since C(n, k) = C(n, n-k)
if (k > n - k):
k = n - k;
# Calculate value of
# [n*(n-1)*---*(n-k+1)] /
# [k*(k-1)*---*1]
for i in range (k):
res * = (n - i);
res / = (i + 1 );
return res;
# A Binomial coefficient based # function to find nth catalan # number in O(n) time def catalan(n):
# Calculate value of 2nCn
c = binomialCoeff( 2 * n, n);
# return 2nCn/(n+1)
return int (c / (n + 1 ));
# Driver code n = 3 ;
print (catalan(n));
# This code is contributed # by mits |
// C# program to find the // nth catalan number using System;
class GFG
{ // Returns value of Binomial // Coefficient C(n, k) static long binomialCoeff( int n,
int k)
{ long res = 1;
// Since C(n, k) = C(n, n-k)
if (k > n - k)
k = n - k;
// Calculate value of
// [n*(n-1)*---*(n-k+1)] /
// [k*(k-1)*---*1]
for ( int i = 0; i < k; ++i)
{
res *= (n - i);
res /= (i + 1);
}
return res;
} // A Binomial coefficient // based function to find // nth catalan number in // O(n) time static long catalan( int n)
{ // Calculate value of 2nCn
long c = binomialCoeff(2 * n, n);
// return 2nCn/(n+1)
return c / (n + 1);
} // Driver code public static void Main()
{ int n = 3;
Console.WriteLine(catalan(n));
} } // This code is contributed // by Subhadeep |
<?php // PHP program to find the // nth catalan number // Returns value of Binomial // Coefficient C(n, k) function binomialCoeff( $n , $k )
{ $res = 1;
// Since C(n, k) = C(n, n-k)
if ( $k > $n - $k )
$k = $n - $k ;
// Calculate value of
// [n*(n-1)*---*(n-k+1)] /
// [k*(k-1)*---*1]
for ( $i = 0; $i < $k ; ++ $i )
{
$res *= ( $n - $i );
$res /= ( $i + 1);
}
return $res ;
} // A Binomial coefficient based // function to find nth catalan // number in O(n) time function catalan( $n )
{ // Calculate value of 2nCn
$c = binomialCoeff(2 * $n , $n );
// return 2nCn/(n+1)
return $c / ( $n + 1);
} // Driver code $n = 3;
echo catalan( $n );
// This code is contributed // by chandan_jnu. ?> |
<script> // javascript program to find the // nth catalan number// Returns value of Binomial // Coefficient C(n, k) function binomialCoeff(n, k)
{ var res = 1;
// Since C(n, k) = C(n, n-k)
if (k > n - k)
k = n - k;
// Calculate value of
// [n*(n-1)*---*(n-k+1)] /
// [k*(k-1)*---*1]
for (i = 0; i < k; ++i)
{
res *= (n - i);
res /= (i + 1);
}
return res;
} // A Binomial coefficient // based function to find // nth catalan number in // O(n) time function catalan(n)
{ // Calculate value of 2nCn
var c = binomialCoeff(2 * n, n);
// return 2nCn/(n+1)
return c / (n + 1);
} // Driver code var n = 3;
document.write(catalan(n)); // This code is contributed by Princi Singh </script> |
5
Time Complexity: O(n)
Auxiliary Space: O(1)