Find the number of valid parentheses expressions of given length

03 Nov, 2021
Given a number n find the number of valid parentheses expressions of that length. Examples :  
Input: 2
Output: 1 
There is only possible valid expression of length 2, "()"

Input: 4
Output: 2 
Possible valid expression of length 4 are "(())" and "()()" 

Input: 6
Output: 5
Possible valid expressions are ((())), ()(()), ()()(), (())() and (()())
This is mainly an application of Catalan Numbers. Total possible valid expressions for input n is n/2’th Catalan Number if n is even and 0 if n is odd.  
Below given is the implementation :  
C++
Java
Python3
C#
PHP
Javascript
// C++ program to find valid paranthesisations of length n// The majority of code is taken from method 3 of// https://www.geeksforgeeks.org/program-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);} // Function to find possible ways to put balanced// parenthesis in an expression of length nunsigned long int findWays(unsigned n){    // If n is odd, not possible to    // create any valid parentheses    if (n & 1)        return 0;     // Otherwise return n/2'th Catalan Number    return catalan(n / 2);} // Driver program to test above functionsint main(){    int n = 6;    cout << "Total possible expressions of length "         << n << " is " << findWays(6);    return 0;}
// Java program to find valid paranthesisations of length n// The majority of code is taken from method 3 of// https://www.geeksforgeeks.org/program-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);    }     // Function to find possible ways to put balanced    // parenthesis in an expression of length n    static long findWays(int n)    {        // If n is odd, not possible to        // create any valid parentheses        if ((n & 1) != 0)            return 0;         // Otherwise return n/2'th Catalan Number        return catalan(n / 2);    }     // Driver program to test above functions    public static void main(String[] args)    {        int n = 6;        System.out.println("Total possible expressions of length " +                                          n + " is " + findWays(6));    }} // This code is contributed by Smitha Dinesh Semwal
# Python3 program to find valid# paranthesisations of length n# The majority of code is taken# from method 3 of# https:#www.geeksforgeeks.org/program-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 int(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)); # Function to find possible# ways to put balanced parenthesis# in an expression of length ndef findWays(n):         # If n is odd, not possible to    # create any valid parentheses    if(n & 1):        return 0;     # Otherwise return n/2'th    # Catalan Number    return catalan(int(n / 2)); # Driver Coden = 6;print("Total possible expressions of length",                       n, "is", findWays(6));     # This code is contributed by mits
// C# program to find valid paranthesisations// of length n The majority of code is taken// from method 3 of// https://www.geeksforgeeks.org/program-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);    }     // Function to find possible ways to put    // balanced parenthesis in an expression    // of length n    static long findWays(int n)    {        // If n is odd, not possible to        // create any valid parentheses        if ((n & 1) != 0)            return 0;         // Otherwise return n/2'th        // Catalan Number        return catalan(n / 2);    }     // Driver program to test    // above functions    public static void Main()    {        int n = 6;        Console.Write("Total possible expressions"                       + "of length " + n + " is "                                   + findWays(6));    }} // This code is contributed by nitin mittal.
<?php// PHP program to find valid// paranthesisations of length n// The majority of code is taken// from method 3 of// https://www.geeksforgeeks.org/program-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);} // Function to find possible// ways to put balanced// parenthesis in an expression// of length nfunction findWays($n){         // If n is odd, not possible to    // create any valid parentheses    if ($n & 1)        return 0;     // Otherwise return n/2'th    // Catalan Number    return catalan($n / 2);}     // Driver Code    $n = 6;    echo "Total possible expressions of length "                    , $n , " is " , findWays(6);     // This code is contributed by nitin mittal?>
<script>// Javascript program to find valid// paranthesisations of length n// The majority of code is taken// from method 3 of// https://www.geeksforgeeks.org/program-nth-catalan-number/ // Returns value of Binomial// Coefficient C(n, k)function binomialCoeff(n, k){    let 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 (let 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    let c = binomialCoeff(2 * n, n);     // return 2nCn/(n+1)    return c / (n + 1);} // Function to find possible// ways to put balanced// parenthesis in an expression// of length nfunction findWays(n){         // If n is odd, not possible to    // create any valid parentheses    if (n & 1)        return 0;     // Otherwise return n/2'th    // Catalan Number    return catalan(n / 2);}     // Driver Code    let n = 6;    document.write("Total possible expressions of length " +                   n + " is " + findWays(6));     // This code is contributed by _saurabh_jaiswal</script>
Output: 
Total possible expressions of length 6 is 5
Time Complexity: O(n)
Auxiliary Space: O(1)This article is contributed by Sachin. Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above 
Smitha Dinesh Semwal
nitin mittal
Mithun Kumar
_saurabh_jaiswal
simmytarika5
rishavmahato348
catalan
Parentheses-Problems
Mathematical
Mathematical
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Operators in C / C++
Prime Numbers
Minimum number of jumps to reach end
The Knight's tour problem | Backtracking-1
Algorithm to solve Rubik's Cube
Modulo 10^9+7 (1000000007)
Modulo Operator (%) in C/C++ with Examples
Program for factorial of a number
Merge two sorted arrays with O(1) extra space
Print all possible combinations of r elements in a given array of size n