printParent

by Paco86

JavaScript

function printParent(n, result = new Set()){
	if(n <= 0 ){
  	return '';
  }else if(n === 1){
  	result = ['()']
  	return result;
  }
  
  let subResults = printParent(n-1);
  subResults.forEach(function(subResult){
  	for(let i = 0; i < subResult.length; i++){
    	if(subResult.charAt(i) === '('){
      	result.add(subResult.substring(0, i + 1) + '()' + subResult.substring(i + 1));
      }
    	
    }
    
    result.add('()' + subResult);
    
  })
  
  return result;
}


function printParent2(leftRem, rightRem = leftRem, result=[], arr=[], index=0){

	if(leftRem < 0 || leftRem > rightRem){
  	return;
  }
  if(leftRem === 0 && rightRem === 0){
  	result.push(arr.join().replace(/,/g,''));
  }else{
		arr[index] = '(';
    console.log(arr + '-----left---' + index);
  	printParent2(leftRem-1, rightRem, result, arr, index+1);
    
		arr[index] = ')';
     console.log(arr + '-----right---' + index);
  	printParent2(leftRem, rightRem-1, result, arr, index+1);
  }
  
  return result;
  
}

console.log(printParent2(2));