w3resource

C Exercises: Generate all combinations of well-formed parentheses from n given pairs of parentheses

C Programming Practice: Exercise-11 with Solution

Write a C programming to generate all combinations of well-formed parentheses from n given pairs of parentheses.

Example: 
Input  n = 5
Output: 
(()())(())
(()())()()
(())((()))
(())(()())
(())(())()
(())()(())
(())()()()
()(((())))
()((()()))
()((())())
()((()))()
()(()(()))
()(()()())
()(()())()
()(())(())
()(())()()
()()((()))
()()(()())
()()(())()
()()()(())
()()()()()

C Code:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

static char** generate_Parenthesis(int n, int* returnSize)
{
    int left_num, right_num, cap = 5000, ctr = 0;
    char *stack = malloc(2 * n + 1);
    char **parentheses = malloc(cap * sizeof(char *));

    char *p = stack;
    left_num = right_num = 0;
    stack[2 * n] = '\0';

    while (p != stack || ctr == 0) {
        if (left_num == n && right_num == n) {
            parentheses[ctr] = malloc(2 * n + 1);
            strcpy(parentheses[ctr], stack);
            ctr++;

            while (--p != stack) {
                if (*p == '(') {
                    if (--left_num > right_num) {
                        *p++ = ')';
                        right_num++;
                        break;
                    }
                } else {
                    right_num--;
                }
            }
        } else {
            /* forward */
            while (left_num < n) {
                *p++ = '(';
                left_num++;
            }
            while (right_num < n) {
                *p++ = ')';
                right_num++;
            }
        }
    }

    *returnSize = ctr;
    return parentheses;
}

int main(void)
{
    int i, ctr;
    i = 5;
    char ** lists = generate_Parenthesis(i, &ctr);
    for (i = 0; i < ctr; i++) {
        printf("%s\n", lists[i]);
    }
    return 0;
}

Sample Output:

((((()))))
(((()())))
(((())()))
(((()))())
(((())))()
((()(())))
((()()()))
((()())())
((()()))()
((())(()))
((())()())
((())())()
((()))(())
((()))()()
(()((())))
(()(()()))
(()(())())
(()(()))()
(()()(()))
(()()()())
(()()())()
(()())(())
(()())()()
(())((()))
(())(()())
(())(())()
(())()(())
(())()()()
()(((())))
()((()()))
()((())())
()((()))()
()(()(()))
()(()()())
()(()())()
()(())(())
()(())()()
()()((()))
()()(()())
()()(())()
()()()(())
()()()()()

Flowchart:

C Programming Flowchart: Generate all combinations of well-formed parentheses from n given pairs of parentheses.

C Programming Code Editor:

Contribute your code and comments through Disqus.

Previous: Write a C programming to check if a given string is valid or not, the string contains the characters '(', ')', '{', '}', '[' and ']'. The string is valid if the open brackets must be closed by the same type of brackets and in correct order.
Next: Write a C program to remove the duplicates from a given array of integers.

What is the difficulty level of this exercise?



C Programming: Tips of the Day

The tilde operator in C:

The ~ operator is bitwise NOT, it inverts the bits in a binary number:

NOT 011100
  = 100011

Ref : https://bit.ly/3DR1N24