/** * @param {number} n * @return {string[]} */ const generateParenthesis = (n) => { if (1 === n) return ["()"]; let processString = `${"(".repeat(n)}${")".repeat(n)}` console.log(`input: ${n} - processString - ${processString}`) let result = process(n, n, "", []); console.log("result") console.log(result) return; }; // nbOpen > NbClose // Only can add closed when open is > closed const process = (open, close, pattern, result) => { // exit if (open > close) return result; if (0 === open && 0 === close) return result.push(pattern); if (open > 0) process(open - 1, close, `${pattern}(`, result); if (close > 0) process(open, close - 1, `${pattern})`, result); return result; } // generateParenthesis(4); generateParenthesis(3);