/*
* Example n= 3.
* Output : ((())) , (()()) , (())() , ()(()), ()()()
*
* The problem can be solved by recursion. Select left or a right paren.
* If count(LeftParen) > 0 one can insert left paren.
* If count(RightParen) > count(LeftParen) i.e. no. of Left paren in an expression is greater than no. of right paren in the expression one can insert right parent.
*
* 1. Check for base case i.e. when no left or right paren are left all used up.
* 2. If base case then print the string of parenthesis.
* 3. If count of left parentheses > 0 then
* Insert Left parentheses in string str and decrement count of left parentheses by 1 and make recursive call.
* 4. If count of right parentheses > count of left parentheses
* Insert right parentheses in string str and decrement count of right parentheses by 1 and make recursive call.
*
*/
void PrintParenthesis(int leftAvailable, int rightAvailable, string str)
{
if(leftAvailable == 0 && rightAvailable == 0)
{
cout<<"n"<<str;
return;
}
if(leftAvailable >0)
PrintParenthesis(leftAvailable-1, rightAvailable, str+"(" );
if(rightAvailable > leftAvailable)
PrintParenthesis(leftAvailable, rightAvailable-1, str+")" );
}
Sunday, 19 May 2013
Implement an algorithm to print all valid combination of n – pairs of parentheses properly opened and closed.
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment