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++
// 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
// 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
# 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#
// 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 // 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. ?> |
Javascript
<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)
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!