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) timeunsigned 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 codeint main(){ int n = 3; cout << catalan(n) << endl; return 0;} |
Java
// Java program to find the// nth catalan numberclass 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) timestatic long catalan( int n){ // Calculate value of 2nCn long c = binomialCoeff(2 * n, n); // return 2nCn/(n+1) return c / (n + 1);}// Driver codepublic 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) timedef catalan(n): # Calculate value of 2nCn c = binomialCoeff(2 * n, n); # return 2nCn/(n+1) return int(c / (n + 1));# Driver coden = 3;print(catalan(n));# This code is contributed # by mits |
C#
// C# program to find the// nth catalan numberusing 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) timestatic long catalan( int n){ // Calculate value of 2nCn long c = binomialCoeff(2 * n, n); // return 2nCn/(n+1) return c / (n + 1);}// Driver codepublic 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) timefunction 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) timefunction catalan(n){ // Calculate value of 2nCn var c = binomialCoeff(2 * n, n); // return 2nCn/(n+1) return c / (n + 1);}// Driver codevar 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!


… [Trackback]
[…] Read More on that Topic: geeksforgeeks.org/number-of-ways-a-convex-polygon-of-n-2-sides-can-split-into-triangles-by-connecting-vertices/ […]