/**
* @param {number} n
* @return {string[]}
*/
var generateParenthesis = function (n) {
const list = []
const backtrack = (list, temp, l, r) => {
if (temp.length === n * 2) {
list.push(temp.join(''))
return
}
if (l > 0) {
l--
temp.push("(")
backtrack(list, temp, l, r)
temp.pop()
l++
}
if (r > l) {
r--
temp.push(")")
backtrack(list, temp, l, r)
temp.pop()
r++
}
}
backtrack(list, [], n, n)
return list
};