// https://leetcode.com/problems/generate-parentheses/
// Using string for partial
function generateParenthesis(n) {
if (n === 0) return []
const result = [],
total = n * 2
function parenHelper(i, open, slate) {
// Valid case so add to result and return
if (i === total && open === 0) {
result.push(slate)
return
}
// Backtracking + base case
if (open < 0 || open > n || i === total) return
// Recursive case
parenHelper(i + 1, open + 1, slate + '(')
parenHelper(i + 1, open - 1, slate + ')')
}
parenHelper(0, 0, '')
return result
}
// Using array for partial
function generateParenthesis(n) {
if (n === 0) return []
const result = [],
total = n * 2
function parenHelper(i, open, slate) {
if (i === total && open === 0) {
result.push(slate.join(''))
return
}
if (open < 0 || open > n || i === total) return
slate.push('(')
parenHelper(i + 1, open + 1, slate)
slate.pop()
slate.push(')')
parenHelper(i + 1, open - 1, slate)
slate.pop()
}
parenHelper(0, 0, [])
return result
}
//Tests
console.log(generateParenthesis(3))
console.log(generateParenthesis(2))
console.log(generateParenthesis(1))
console.log(generateParenthesis(0))