We can use a backtracking/recursive approach to solve this.
- If parenthesis is balanced, we can store it in the result array
- We start by adding left side parenthesis
- If right side is less than left, it will add to right side to balance it
/**
* @param {number} n
* @return {string[]}
*/
var generateParenthesis = function(n) {
let string = "";
let ret = [];
let generate = (string, left, right) => {
if(left == n && right == n){
console.log(string)
ret.push(string)
return;
}
if(left < n){
string = string + "("
generate(string, left+1, right)
string = string.slice(0,-1)
}
if(right < left){
string = string + ")"
generate(string, left, right+1)
}
}
generate(string, 0, 0)
return ret;
};